Skip to content

Instantly share code, notes, and snippets.

@asvnpr
Created February 28, 2020 19:08
Show Gist options
  • Save asvnpr/38602b91b4bf69f748cb3a6ef31a6a0c to your computer and use it in GitHub Desktop.
Save asvnpr/38602b91b4bf69f748cb3a6ef31a6a0c to your computer and use it in GitHub Desktop.
Similarity Search Demo.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"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.6.9"
},
"colab": {
"name": "Similarity Search Demo.ipynb",
"provenance": [],
"collapsed_sections": [],
"include_colab_link": true
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/asvnpr/38602b91b4bf69f748cb3a6ef31a6a0c/similarity-search-demo.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wehaECjm8Z4t",
"colab_type": "text"
},
"source": [
"# Services Content Embedding: Similarity Search\n",
"\n",
"- uses our [Universal Sentence Encoder](https://tfhub.dev/google/universal-sentence-encoder/4) embeddings of Services description and other auxilary data\n",
"- embed the user given query and find the top-k most similar services\n",
"\n",
"[Try your own query](#User-Query) \n",
"[Explore Services Similarity](#Service-Similarity-Heatmap)\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "k7aPQSzCj9jr",
"colab_type": "text"
},
"source": [
"## Imports and Global Config\n",
"\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "a73qer_zPJLy",
"colab_type": "code",
"colab": {}
},
"source": [
"!pip3 install annoy h2o4gpu tqdm tensorflow_text==2.0rc0 gdown"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "fidU1Ta38Z45",
"colab_type": "code",
"outputId": "5c18bf90-9082-4cbb-ca7a-a2551d05af9a",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
}
},
"source": [
"#following this guide: https://colab.research.google.com/drive/1t4bi7X7zRzwIjdxUrU2hUs7LneqgYLVK#scrollTo=a73qer_zPJLy\n",
"# and: https://github.com/tensorflow/hub/blob/master/examples/colab/tf2_semantic_approximate_nearest_neighbors.ipynb\n",
"\n",
"try:\n",
" # %tensorflow_version only exists in Colab.\n",
" %tensorflow_version 2.x\n",
"except Exception:\n",
" pass\n",
" \n",
"import tensorflow as tf\n",
"import tensorflow_text\n",
"import tensorflow_hub as hub\n",
"import numpy as np\n",
"from h2o4gpu.metrics.pairwise import cosine_similarity\n",
"import seaborn as sns\n",
"import annoy\n",
"import gdown\n",
"import json\n",
"import os\n",
"import pickle\n",
"import pandas as pd\n",
"import random\n",
"from tqdm import tqdm, trange\n",
"import logging"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"TensorFlow 2.x selected.\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "EgvycbQTG7Lj",
"colab_type": "code",
"outputId": "6311573c-709a-42ab-a329-b9af557a2499",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 108
}
},
"source": [
"# make sure we're using a gpu or hw acceleration before we start embedding!!\n",
"# NOTE: works inconsistently \n",
"if not tf.test.is_gpu_available() and 'COLAB_TPU_ADDR' not in os.environ:\n",
" print(\"WARNING!: This notebook is not connected to a GPU nor TPU runtime.\")\n",
"else:\n",
" print(\"HW Acceleration should work :)\")"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"WARNING:tensorflow:From <ipython-input-2-d6bac8f179d3>:1: is_gpu_available (from tensorflow.python.framework.test_util) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Use `tf.config.list_physical_devices('GPU')` instead.\n",
"HW Acceleration should work :)\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "W_32VQBkkQWP",
"colab_type": "code",
"outputId": "b02333b5-ff98-476d-8169-a752bbc4a221",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 35
}
},
"source": [
"NODE_TYPE = 'services'\n",
"\n",
"MODEL = 'USE'\n",
"MODEL_URL = 'https://tfhub.dev/google/universal-sentence-encoder-large/5'\n",
"MODEL_TYPE = MODEL_URL.split('/')[-2]\n",
"MODEL_VER = MODEL_URL.split('/')[-1]\n",
"\n",
"print(\"Using Model {}_{}_v{}\".format(MODEL, MODEL_TYPE, MODEL_VER))"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Using Model USE_universal-sentence-encoder-large_v5\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "UcHy7er_1P3Z",
"colab_type": "text"
},
"source": [
"## Get our service texts, service embeddings, and taxonomy codes"
]
},
{
"cell_type": "code",
"metadata": {
"id": "A4spVCrY8Z5W",
"colab_type": "code",
"outputId": "134fb7e1-997f-4cdd-961f-1677e4765aef",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 284
}
},
"source": [
"texts_url = 'https://drive.google.com/uc?id=1-4eT0u1Cdg4fE8MLXdfEsaLWeljXDKeE'\n",
"texts_file = 'tagged_texts.json'\n",
"tagged_texts = {}\n",
"gdown.download(texts_url, texts_file, quiet=False)\n",
"\n",
"with open(texts_file) as tf:\n",
" tagged_texts = json.load(tf)\n",
" print(\"Loaded {} Services text docs...\".format(len(tagged_texts)))\n",
"\n",
"embed_url = 'https://drive.google.com/uc?id=1li8eF5VCJ2wxl9FpfeQky8Z_1K3gx-bf'\n",
"embed_file = \"{}_{}_v{}.pkl\".format(NODE_TYPE, MODEL_TYPE, MODEL_VER)\n",
"gdown.download(embed_url, embed_file, quiet=False)\n",
"\n",
"with open(embed_file, 'rb') as f:\n",
" tagged_embeds = pickle.load(f)\n",
" e_key = list(tagged_embeds.keys())[0]\n",
" e_smpl = tagged_embeds[e_key]['embed']\n",
" print(\"Loaded {} {}-dimensional embeddings...\".format(len(tagged_embeds), len(e_smpl)))\n",
"\n",
"taxo_url = 'https://drive.google.com/uc?id=10gfognNI2_Q4epqApYVrFSemIZblQKjy'\n",
"taxo_file = 'HIN_nodes.json'\n",
"gdown.download(taxo_url, taxo_file, quiet=False)\n",
"\n",
"with open(taxo_file) as taxo:\n",
" taxo_nodes = json.load(taxo)\n",
" print(\"Loaded taxonomy codes...\")"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Downloading...\n",
"From: https://drive.google.com/uc?id=1-4eT0u1Cdg4fE8MLXdfEsaLWeljXDKeE\n",
"To: /content/tagged_texts.json\n",
"13.2MB [00:00, 247MB/s]\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"Loaded 16547 Services text docs...\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"Downloading...\n",
"From: https://drive.google.com/uc?id=1li8eF5VCJ2wxl9FpfeQky8Z_1K3gx-bf\n",
"To: /content/services_universal-sentence-encoder-large_v5.pkl\n",
"35.2MB [00:00, 188MB/s]\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"Loaded 16547 512-dimensional embeddings...\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"Downloading...\n",
"From: https://drive.google.com/uc?id=10gfognNI2_Q4epqApYVrFSemIZblQKjy\n",
"To: /content/HIN_nodes.json\n",
"59.9MB [00:00, 233MB/s]\n"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"Loaded taxonomy codes...\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "XkxKDM_AKVsN",
"colab_type": "code",
"colab": {}
},
"source": [
"# reformat data for easier use\n",
"node_names = [taxo_nodes[idx]['name'] for idx in tagged_texts]\n",
"node_embeds = [tagged_embeds[idx]['embed'] for idx in tagged_embeds]\n",
"node_texts = ['\\n'.join(tagged_texts[idx]) for idx in tagged_embeds]\n",
"node_ids = list(tagged_embeds.keys())\n",
"# get size of vectors\n",
"embed_dim = len(e_smpl)\n",
"# consolidate all our data into a single var\n",
"embed_data = list(zip(node_ids, node_names, node_texts, node_embeds))"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "TzIZfPh81YzP",
"colab_type": "text"
},
"source": [
"## Semantic Similarity Search: \n",
"get the most similar items for each of our queries"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4QbVvDrLFxZB",
"colab_type": "text"
},
"source": [
"### Approximate Nearest Neighbors\n",
"\n",
"Using [ANNOY](https://github.com/spotify/annoy) to build a search index so we can have a real-time search instead of searching through the 10K+ embeddings for every query.\n",
"\n",
"Load our Search Index file. "
]
},
{
"cell_type": "code",
"metadata": {
"id": "qN7bXLJYlMIJ",
"colab_type": "code",
"outputId": "20de3850-277c-4d33-da82-72be7c5dbd80",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 195
}
},
"source": [
"index_url = 'https://drive.google.com/uc?id=1--4qmz9oaP-AgWZxgt9gp_qmn7X0oYul'\n",
"index_file = \"{}_{}_{}_ANNOY_index\".format(NODE_TYPE, MODEL, MODEL_TYPE)\n",
"gdown.download(index_url, index_file, quiet=False)\n",
"\n",
"mapping_url = 'https://drive.google.com/uc?id=1--H7X_OErsUypKoaBSACE1TVtSDbqlO2'\n",
"mapping_file = index_file + '.mapping'\n",
"gdown.download(mapping_url, mapping_file, quiet=False)\n",
"\n",
"# adapted from: https://github.com/tensorflow/hub/blob/master/examples/colab/tf2_semantic_approximate_nearest_neighbors.ipynb\n",
"# uses an approximate nearest neighbor index (with ANNOY lib)\n",
"# used to avoid searching through the entirety of our data when comparing queries\n",
"# TODO: experiment with param values\n",
"\n",
"# load the index and mapping files\n",
"index = annoy.AnnoyIndex(embed_dim, metric='angular')\n",
"index.load(index_file, prefault=True)\n",
"print('Annoy index is loaded.')\n",
"with open(mapping_file, 'rb') as handle:\n",
" mapping = pickle.load(handle)\n",
"print('Mapping file is loaded.')"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Downloading...\n",
"From: https://drive.google.com/uc?id=1--4qmz9oaP-AgWZxgt9gp_qmn7X0oYul\n",
"To: /content/services_USE_universal-sentence-encoder-large_ANNOY_index\n",
"63.1MB [00:00, 248MB/s]\n",
"Downloading...\n",
"From: https://drive.google.com/uc?id=1--H7X_OErsUypKoaBSACE1TVtSDbqlO2\n",
"To: /content/services_USE_universal-sentence-encoder-large_ANNOY_index.mapping\n",
"13.3MB [00:00, 274MB/s]"
],
"name": "stderr"
},
{
"output_type": "stream",
"text": [
"Annoy index is loaded.\n",
"Mapping file is loaded.\n"
],
"name": "stdout"
},
{
"output_type": "stream",
"text": [
"\n"
],
"name": "stderr"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "BIX3NbLblVoo",
"colab_type": "code",
"colab": {}
},
"source": [
"# Finds similar items to a given embedding in the ANN index\n",
"def find_similar_items_filter(embedding, num_matches=100, k=10):\n",
" ids, distances = index.get_nns_by_vector(\n",
" embedding, num_matches, search_k=-1, include_distances=True)\n",
" items = [mapping[i] for i in ids]\n",
"\n",
" uniq_names = set()\n",
" uniq_descrs = set()\n",
" uniq_codes = set()\n",
" filter_items = []\n",
" filter_dists = []\n",
" i = 0\n",
" while len(uniq_names) < num_matches and i < len(items):\n",
" name = items[i]['name']\n",
" # get node with item info \n",
" node = taxo_nodes[items[i]['id']]\n",
" descr = node['description']\n",
" codes = node['codes']\n",
" codes = [c.split('.')[0] for c in codes] \n",
" new_codes = [c not in uniq_codes for c in codes]\n",
" if name not in uniq_names and descr not in uniq_descrs and all(new_codes):\n",
" # print(name)\n",
" uniq_names.add(name)\n",
" uniq_descrs.add(descr)\n",
" # print(new_codes)\n",
" # print(uniq_codes)\n",
" for idx, nc in enumerate(new_codes):\n",
" if nc:\n",
" uniq_codes.add(codes[idx])\n",
" filter_items.append(items[i])\n",
" filter_dists.append(distances[i])\n",
" i += 1\n",
" return filter_items[:k], filter_dists[:k]\n",
"\n",
"def find_similar_items(embedding, num_matches=100, k=10):\n",
" ids, distances = index.get_nns_by_vector(\n",
" embedding, num_matches, search_k=-1, include_distances=True)\n",
" items = [mapping[i] for i in ids]\n",
"\n",
" return items[:k], distances[:k]"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "AIxHISIVui6P",
"colab_type": "code",
"outputId": "706170c3-2242-4068-cfb1-6c8527c4a94c",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 88
}
},
"source": [
"# Load the TF-Hub module\n",
"print(\"Loading the TF-Hub {} module...\".format(MODEL))\n",
"%time embed_fn = hub.load(MODEL_URL)\n",
"print(\"TF-Hub module is loaded.\")\n",
"\n",
"def extract_embed(queries):\n",
" # Generates the embedding for the query\n",
" query_embedding = embed_fn(queries).numpy()\n",
" # print(len(query_embedding))\n",
" return query_embedding\n",
"\n",
"def k_query_matches(queries, sample_size=10, num_res=100, k=10, all_queries=False, out=True, filtr=True, dist_var=False, dl=0.5, du=0.8):\n",
" if all_queries:\n",
" sample_size = len(queries)\n",
"\n",
" query_samples = random.choices(queries, k=sample_size)\n",
" for query in query_samples:\n",
" # print(query)\n",
" query_embed = extract_embed([query])[0]\n",
"\n",
" items, dists = None, None\n",
" if filtr:\n",
" items, dists = find_similar_items_filter(query_embed, num_res, k)\n",
" elif dist_var:\n",
" # try to add variety by getting items where similarity between \n",
" # new candidate and all currently selected items statisfies\n",
" # dl <= dist <= du\n",
" items, dists = find_similar_items(query_embed, num_res, k)\n",
" # add the first embedding since it is excempt from the condition\n",
" var_items, var_dists, res_embeds = [], [], [tagged_embeds[items[0]['id']]['embed']]\n",
" i = 1\n",
" while len(var_items) < k and i < len(items):\n",
" embed = tagged_embeds[items[i]['id']]['embed']\n",
" # TODO: maybe change to cosine distance to be consistent\n",
" e_dists = [cosine_similarity([e], [embed]) for e in res_embeds]\n",
" if all(ed >= dl and ed <= du for ed in e_dists):\n",
" var_items.append(items[i])\n",
" var_dists.append(dists[i])\n",
" res_embeds.append(embed) \n",
" items = var_items\n",
" dists = var_dists\n",
" else:\n",
" items, dists = find_similar_items(query_embed, num_matches=k)\n",
"\n",
" if out:\n",
" print(\"Top-{} most similar items (w.o. duplicates) to query \\\"{}\\\":\".format(len(items), query))\n",
" for i in range(len(items)):\n",
" item = items[i]\n",
" dist = dists[i]\n",
" name = item['name']\n",
" print(\"({}) {} (dist={})\".format(i+1, name, dist))\n",
" print()\n",
" return items, dists"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Loading the TF-Hub USE module...\n",
"CPU times: user 18.6 s, sys: 3.24 s, total: 21.9 s\n",
"Wall time: 28 s\n",
"TF-Hub module is loaded.\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "vQ3O1Gw7MVCD",
"colab_type": "text"
},
"source": [
"## User Query\n",
"Make sure to **run all the code cells above** and enter your own relevant query to find similar social services"
]
},
{
"cell_type": "code",
"metadata": {
"id": "XEf54OEjBI8X",
"colab_type": "code",
"outputId": "eae0f24d-c121-4d6a-c2c2-f04578def6c2",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 284
}
},
"source": [
"user_query = [input(\"Write a query to get recommended services: \")]\n",
"\n",
"# %time matches, distances = k_query_matches(user_query, sample_size=len(user_query), filtr=False)\n",
"%time matches, distances = k_query_matches(user_query, sample_size=len(user_query), filtr=True)\n",
"# %time matches, distances = k_query_matches(user_query, sample_size=len(user_query), dist_var=True)"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Write a query to get recommended services: adoption\n",
"Top-10 most similar items (w.o. duplicates) to query \"adoption\":\n",
"(1) Adoption Services (dist=0.9472340941429138)\n",
"(2) Domestic Infant And International Adoption (dist=1.0427831411361694)\n",
"(3) Adoption / Foster Care (dist=1.0706366300582886)\n",
"(4) Clerk's Office - Main Street - South Bend (dist=1.088861107826233)\n",
"(5) Birth Parent Network - Indiana Birth Parents (dist=1.1011050939559937)\n",
"(6) Foster Parenting - Mishawaka (dist=1.102400541305542)\n",
"(7) Angels Of Love - (dist=1.1205506324768066)\n",
"(8) Family Planning (dist=1.1461135149002075)\n",
"(9) Pregnancy Services (dist=1.1584712266921997)\n",
"(10) Information and Referral (dist=1.1598827838897705)\n",
"\n",
"CPU times: user 42.2 ms, sys: 2.79 ms, total: 45 ms\n",
"Wall time: 29.5 ms\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "NVe1mbYuCo0p",
"colab_type": "text"
},
"source": [
"## Broad Service-Service Comparisons\n",
"- each service has one or more [211 taxonomy codes](https://211taxonomy.org/publicfiles/view/Intro-What_is_the_AIRS.pdf) of the form AZ-1234.\\[5678\\]. The less characters the code has, the more broad is the social service category following a hierarchy\n",
"- We use the broadest codes (1 letter) for the x and y axis which cover 9 categories , and the next level down (2 letters) which cover 96 categories for a more granular comparison \n",
"- We average the embeddigns for the sum of all embeddings in a code and compare them in a heatmap of their cosine similarity"
]
},
{
"cell_type": "code",
"metadata": {
"id": "JdRsPmGCBPJo",
"colab_type": "code",
"outputId": "04a75cb7-f654-4288-fe5e-5dc3d1ebb1b1",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 88
}
},
"source": [
"def node_to_n_degree_code(node_num, code_names, n=2):\n",
" node = taxo_nodes[node_num]\n",
" codes = node['codes']\n",
" main_code = None\n",
" if len(codes) >= 1:\n",
" main_code = codes[0]\n",
" main_code = main_code[:n]\n",
" else:\n",
" main_code = None\n",
"\n",
" return main_code\n",
"\n",
"code_names_url = 'https://drive.google.com/uc?id=1Zummlwwvg3mCKH58Q5uCMtqow2YTjw_e'\n",
"code_names_file = 'code_to_name.json'\n",
"gdown.download(code_names_url, code_names_file, quiet=False)\n",
"\n",
"with open(code_names_file) as ctn:\n",
" code_names = json.loads(ctn.read())\n",
"\n",
"def getLabelEmbeds(code_len='1'):\n",
" tagged_lbl_emb = {}\n",
" lbl_to_avg_emb = {'No Label': []}\n",
" lbl_cnt = {'No Label': 0}\n",
" # TODO change how code_names is saved so it only has the lbls from 2 char codes\n",
"\n",
" for lbl in code_names[code_len].values():\n",
" # print(lbl)\n",
" lbl_to_avg_emb[lbl] = []\n",
" lbl_cnt[lbl] = 0\n",
"\n",
" for node_num in tagged_embeds:\n",
"\n",
" node_codes = taxo_nodes[node_num]['codes']\n",
" main_code = node_to_n_degree_code(node_num, node_codes, n=int(code_len))\n",
" if main_code == None:\n",
" lbl = 'No Label'\n",
" # pseudo label according to 2 first chars of taxonomy code\n",
" else:\n",
" lbl = code_names[code_len][main_code]\n",
" tagged_lbl_emb[node_num] = {'embed': tagged_embeds[node_num]['embed'], 'label': lbl}\n",
" lbl_to_avg_emb[lbl].append(tagged_embeds[node_num]['embed'])\n",
" # print(len(lbl_to_avg_emb[lbl]))\n",
" lbl_cnt[lbl] += 1\n",
" \n",
" # get the mean of each collected label embeddings\n",
" keys_to_del = []\n",
" for lbl in lbl_to_avg_emb:\n",
" if lbl_to_avg_emb[lbl] == []:\n",
" keys_to_del.append(lbl)\n",
" \n",
" else: \n",
" avg_embed = np.mean(lbl_to_avg_emb[lbl], axis=0)\n",
" lbl_to_avg_emb[lbl] = avg_embed\n",
" # print(avg_embed.shape)\n",
" for lbl in keys_to_del:\n",
" try:\n",
" lbl_to_avg_emb.pop(lbl) \n",
" lbl_cnt.pop(lbl) \n",
" except KeyError:\n",
" print(\"Key not found\") \n",
" # for lbl in lbl_cnt:\n",
" # print(\"Label {} has {} elements\".format(lbl, lbl_cnt[lbl]))\n",
" print(\"Nodes have {} labels\".format(len(lbl_to_avg_emb)))\n",
" return tagged_lbl_emb, lbl_to_avg_emb, lbl_cnt"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Downloading...\n",
"From: https://drive.google.com/uc?id=1Zummlwwvg3mCKH58Q5uCMtqow2YTjw_e\n",
"To: /content/code_to_name.json\n",
"100%|██████████| 3.76k/3.76k [00:00<00:00, 5.54MB/s]\n"
],
"name": "stderr"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "MMo4v6ABBRaA",
"colab_type": "code",
"outputId": "adebfab7-5de5-47aa-d5e3-d2e23adbf375",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 88
}
},
"source": [
"lvl1_tagged_embs, lvl1_avg_embeds, lvl1_cnt = getLabelEmbeds(code_len='1')\n",
"lvl2_tagged_embs, lvl2_avg_embeds, lvl2_cnt = getLabelEmbeds(code_len='2')\n",
"\n",
"label_hierarchy = {}\n",
"for lbl in lvl1_avg_embeds:\n",
" label_hierarchy[lbl] = set()\n",
"\n",
"# get order of nodes to display their names when hovering\n",
"lbl_node_nums = {}\n",
"for lbl in lvl1_avg_embeds:\n",
" lbl_node_nums[lbl] = []\n",
"\n",
"for n_idx in lvl1_tagged_embs:\n",
" lvl1_lbl = lvl1_tagged_embs[n_idx]['label']\n",
"\n",
" label_hierarchy[lvl1_lbl].add(lvl2_tagged_embs[n_idx]['label'])\n",
" # lbl_node_nums[lvl1_lbl].append(n_idx)\n",
"\n",
"# get the embeddings grouped according to lvl1 labels\n",
"reordered_embeds = []\n",
"reordered_lbls = []\n",
"for lbl in label_hierarchy:\n",
"\n",
" sub_lbls = label_hierarchy[lbl]\n",
" for sub in sub_lbls:\n",
" reordered_embeds.append(lvl2_avg_embeds[sub])\n",
" reordered_lbls.append(sub)\n",
"\n",
"# reordered_names = [taxo_nodes[n_idx]['name'] for n_idx in reordered_node_ids]\n",
"embed_sims = cosine_similarity(reordered_embeds)\n",
"tick_vals = []\n",
"tick_total = 0\n",
"for lbl in lvl1_cnt:\n",
" val = lvl1_cnt[lbl]\n",
" tick_vals.append(val // 2)\n",
" tick_total += val\n",
"\n",
"print(\"Have {} names for x,y axis\".format(len(reordered_lbls)))\n",
"# print(reordered_embeds)\n",
"print(\"Have {}x{} similarity matrix\".format(len(embed_sims), len(embed_sims[0])))\n",
"\n",
"# print(list(lvl1_avg_embeds.keys()))"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Nodes have 12 labels\n",
"Nodes have 73 labels\n",
"Have 73 names for x,y axis\n",
"Have 73x73 similarity matrix\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "gE8xT2NqM0x3",
"colab_type": "text"
},
"source": [
"## Services Similarity Heatmap"
]
},
{
"cell_type": "code",
"metadata": {
"id": "uYaweLC2Bd0D",
"colab_type": "code",
"outputId": "e5e83847-1335-4a3f-ce78-7a25a9929920",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 853
}
},
"source": [
"import plotly.graph_objects as go\n",
"import datetime\n",
"import numpy as np\n",
"np.random.seed(1)\n",
"\n",
"ticks = list(label_hierarchy.keys())\n",
"sim_threshold = float(input(\"Enter a minimum similarity threshold (0.0 <= x <= 1.0) for service comparison: \"))\n",
"while sim_threshold > 1.0 or sim_threshold < 0.0:\n",
" sim_threshold = float(input(\"Enter a minimum similarity threshold (0.0 <= x <= 1.0) for service comparison: \"))\n",
"threshold_sims = [list(map(lambda x: x if x >= sim_threshold else 0.0, row)) for row in embed_sims]\n",
"\n",
"y = reordered_lbls\n",
"x = reordered_lbls\n",
"z = threshold_sims\n",
"\n",
"def split_text(text, delim=' '):\n",
" txt = ''\n",
" for j, word in enumerate(text.split(delim)):\n",
" if j % 2 == 0:\n",
" txt += word + ' <br>'\n",
" else:\n",
" txt += word + ''\n",
" tick_text[i] = txt\n",
"\n",
"tick_text = list(lvl1_avg_embeds.keys())\n",
"for i, text in enumerate(tick_text):\n",
" if '/' in text:\n",
" split_text(text, delim='/')\n",
" else:\n",
" split_text(text)\n",
"\n",
"\n",
"dx_dy = 6\n",
"\n",
"x_axis = dict(\n",
" tickmode = 'array',\n",
" tickvals = list(range(0, len(tick_text)*dx_dy, dx_dy)),\n",
" ticktext = tick_text\n",
")\n",
"\n",
"y_axis = dict(\n",
" tickmode = 'array',\n",
" tickvals = list(range(0, len(tick_text)*dx_dy, dx_dy)),\n",
" ticktext = tick_text\n",
")\n",
"\n",
"color_scales = ['aggrnyl', 'agsunset', 'algae', 'amp', 'armyrose', 'balance',\n",
" 'blackbody', 'bluered', 'blues', 'blugrn', 'bluyl', 'brbg',\n",
" 'brwnyl', 'bugn', 'bupu', 'burg', 'burgyl', 'cividis', 'curl',\n",
" 'darkmint', 'deep', 'delta', 'dense', 'earth', 'edge', 'electric',\n",
" 'emrld', 'fall', 'geyser', 'gnbu', 'gray', 'greens', 'greys',\n",
" 'haline', 'hot', 'hsv', 'ice', 'icefire', 'inferno', 'jet',\n",
" 'magenta', 'magma', 'matter', 'mint', 'mrybm', 'mygbm', 'oranges',\n",
" 'orrd', 'oryel', 'peach', 'phase', 'picnic', 'pinkyl', 'piyg',\n",
" 'plasma', 'plotly3', 'portland', 'prgn', 'pubu', 'pubugn', 'puor',\n",
" 'purd', 'purp', 'purples', 'purpor', 'rainbow', 'rdbu', 'rdgy',\n",
" 'rdpu', 'rdylbu', 'rdylgn', 'redor', 'reds', 'solar', 'spectral',\n",
" 'speed', 'sunset', 'sunsetdark', 'teal', 'tealgrn', 'tealrose',\n",
" 'tempo', 'temps', 'thermal', 'tropic', 'turbid', 'twilight',\n",
" 'viridis', 'ylgn', 'ylgnbu', 'ylorbr', 'ylorrd']\n",
"\n",
"color_scale = random.choice(color_scales)\n",
"print(\"Using color scale: {}\".format(color_scale))\n",
"\n",
"\n",
"fig = go.Figure(data=go.Heatmap(\n",
" z=z,\n",
" x=x,\n",
" y=y,\n",
" colorscale = color_scale))\n",
"\n",
"fig.update_layout(\n",
" title='Service-to-Service Similarity',\n",
" xaxis_nticks=len(tick_text),\n",
" yaxis_nticks=len(tick_text),\n",
" width = 1000,\n",
" height = 800,\n",
" xaxis_type = 'category',\n",
" yaxis_type = 'category',\n",
" xaxis = x_axis,\n",
" yaxis = y_axis,\n",
" margin=dict(l=20, r=30, t=50, b=40),\n",
" paper_bgcolor=\"LightSteelBlue\",\n",
" font=dict(\n",
" family=\"Courier New, monospace\",\n",
" size=12,\n",
" # color=\"#7f7f7f\"\n",
" )\n",
" )\n",
" \n",
"\n",
"fig.show()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Enter a minimum similarity threshold (0.0 <= x <= 1.0) for service comparison: 0.65\n",
"Using color scale: speed\n"
],
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"text/html": [
"<html>\n",
"<head><meta charset=\"utf-8\" /></head>\n",
"<body>\n",
" <div>\n",
" <script src=\"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG\"></script><script type=\"text/javascript\">if (window.MathJax) {MathJax.Hub.Config({SVG: {font: \"STIX-Web\"}});}</script>\n",
" <script type=\"text/javascript\">window.PlotlyConfig = {MathJaxConfig: 'local'};</script>\n",
" <script src=\"https://cdn.plot.ly/plotly-latest.min.js\"></script> \n",
" <div id=\"c559721a-70c2-4189-b1ba-d52990f8089d\" class=\"plotly-graph-div\" style=\"height:800px; width:1000px;\"></div>\n",
" <script type=\"text/javascript\">\n",
" \n",
" window.PLOTLYENV=window.PLOTLYENV || {};\n",
" \n",
" if (document.getElementById(\"c559721a-70c2-4189-b1ba-d52990f8089d\")) {\n",
" Plotly.newPlot(\n",
" 'c559721a-70c2-4189-b1ba-d52990f8089d',\n",
" [{\"colorscale\": [[0.0, \"rgb(254, 252, 205)\"], [0.09090909090909091, \"rgb(239, 225, 156)\"], [0.18181818181818182, \"rgb(221, 201, 106)\"], [0.2727272727272727, \"rgb(194, 182, 59)\"], [0.36363636363636365, \"rgb(157, 167, 21)\"], [0.45454545454545453, \"rgb(116, 153, 5)\"], [0.5454545454545454, \"rgb(75, 138, 20)\"], [0.6363636363636364, \"rgb(35, 121, 36)\"], [0.7272727272727273, \"rgb(11, 100, 44)\"], [0.8181818181818182, \"rgb(18, 78, 43)\"], [0.9090909090909091, \"rgb(25, 56, 34)\"], [1.0, \"rgb(23, 35, 18)\"]], \"type\": \"heatmap\", \"x\": [\"No Label\", \"Housing/Shelter\", \"Food\", \"Transportation\", \"Utilities\", \"Material Goods\", \"Money Management\", \"Tax Organizations and Services\", \"Consumer Regulation\", \"Consumer Assistance and Protection\", \"Courts\", \"Legal Assistance Modalities\", \"Law Enforcement Services\", \"Criminal Correctional System\", \"Judicial Services\", \"Law Enforcement Agencies\", \"Legal Services\", \"Educational Institutions/Schools\", \"Educational Programs\", \"Educational Support Services\", \"Environmental Protection and Improvement\", \"Public Safety\", \"Public Health\", \"Rehabilitation/Habilitation Services\", \"Health Supportive Services\", \"Specialty Medicine\", \"Specialized Treatment and Prevention\", \"Health Screening/Diagnostic Services\", \"General Medical Care\", \"Inpatient Health Facilities\", \"Emergency Medical Care\", \"Human Reproduction\", \"Outpatient Health Facilities\", \"Public Assistance Programs\", \"Social Insurance Programs\", \"Employment\", \"Temporary Financial Assistance\", \"Volunteer Opportunities\", \"Death Certification/Burial Arrangements\", \"Mutual Support\", \"Volunteer Development\", \"Social Development and Enrichment\", \"Domestic Animal Services\", \"Individual and Family Support Services\", \"Leisure Activities/Recreation\", \"Mental Health Assessment and Treatment\", \"Counseling Approaches\", \"Mental Health Support Services\", \"Mental Health Care Facilities\", \"Substance Use Disorder Services\", \"Community Planning and Public Works\", \"Community Groups and Government/Administrative Offices\", \"Information Services\", \"International Affairs\", \"Research\", \"Disaster Services\", \"Political Organization and Participation\", \"Military Service\", \"Community Economic Development and Finance\", \"Occupational/Professional Associations\", \"Arts and Culture\", \"Donor Services\", \"Community Facilities/Centers\", \"Organizational Development and Management Services\", \"Disabilities and Health Conditions\", \"Families and Individuals Needing Support\", \"Military Personnel/Contractors\", \"Topical Identifiers/Issues\", \"Benefits Recipients\", \"Citizenship\", \"Living Situation/Housing Status\", \"Transients\", \"Occupations\"], \"y\": [\"No Label\", \"Housing/Shelter\", \"Food\", \"Transportation\", \"Utilities\", \"Material Goods\", \"Money Management\", \"Tax Organizations and Services\", \"Consumer Regulation\", \"Consumer Assistance and Protection\", \"Courts\", \"Legal Assistance Modalities\", \"Law Enforcement Services\", \"Criminal Correctional System\", \"Judicial Services\", \"Law Enforcement Agencies\", \"Legal Services\", \"Educational Institutions/Schools\", \"Educational Programs\", \"Educational Support Services\", \"Environmental Protection and Improvement\", \"Public Safety\", \"Public Health\", \"Rehabilitation/Habilitation Services\", \"Health Supportive Services\", \"Specialty Medicine\", \"Specialized Treatment and Prevention\", \"Health Screening/Diagnostic Services\", \"General Medical Care\", \"Inpatient Health Facilities\", \"Emergency Medical Care\", \"Human Reproduction\", \"Outpatient Health Facilities\", \"Public Assistance Programs\", \"Social Insurance Programs\", \"Employment\", \"Temporary Financial Assistance\", \"Volunteer Opportunities\", \"Death Certification/Burial Arrangements\", \"Mutual Support\", \"Volunteer Development\", \"Social Development and Enrichment\", \"Domestic Animal Services\", \"Individual and Family Support Services\", \"Leisure Activities/Recreation\", \"Mental Health Assessment and Treatment\", \"Counseling Approaches\", \"Mental Health Support Services\", \"Mental Health Care Facilities\", \"Substance Use Disorder Services\", \"Community Planning and Public Works\", \"Community Groups and Government/Administrative Offices\", \"Information Services\", \"International Affairs\", \"Research\", \"Disaster Services\", \"Political Organization and Participation\", \"Military Service\", \"Community Economic Development and Finance\", \"Occupational/Professional Associations\", \"Arts and Culture\", \"Donor Services\", \"Community Facilities/Centers\", \"Organizational Development and Management Services\", \"Disabilities and Health Conditions\", \"Families and Individuals Needing Support\", \"Military Personnel/Contractors\", \"Topical Identifiers/Issues\", \"Benefits Recipients\", \"Citizenship\", \"Living Situation/Housing Status\", \"Transients\", \"Occupations\"], \"z\": [[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7553563117980957, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.9999998807907104, 0.6904983520507812, 0.7366070747375488, 0.774472177028656, 0.6736093759536743, 0.6595546007156372, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6502035856246948, 0.0, 0.0, 0.0, 0.6958160996437073, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7780680656433105, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8123884201049805, 0.0, 0.0, 0.765268087387085, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7226804494857788, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6664921045303345, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6854588985443115, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.6904983520507812, 1.0, 0.6530261039733887, 0.0, 0.7156943082809448, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6623960733413696, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8270643353462219, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6983104944229126, 0.0, 0.0, 0.0, 0.0], [0.0, 0.7366070747375488, 0.6530261039733887, 0.9999998807907104, 0.6833969354629517, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6555718779563904, 0.0, 0.0, 0.0, 0.0, 0.7868667244911194, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7302899360656738, 0.0, 0.0, 0.6671428084373474, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6706030964851379, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.774472177028656, 0.0, 0.6833969354629517, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6530612111091614, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.751106858253479, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7720210552215576, 0.0, 0.0, 0.7732133269309998, 0.0, 0.7551658153533936, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7066022753715515, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6585502028465271, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.6736093759536743, 0.7156943082809448, 0.0, 0.0, 1.0000001192092896, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6803867220878601, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.820601224899292, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.6595546007156372, 0.0, 0.0, 0.0, 0.0, 1.0000001192092896, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6807650923728943, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9999996423721313, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.000000238418579, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6668874025344849, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6677312850952148, 0.6789309978485107, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9999997615814209, 0.0, 0.0, 0.0, 0.6952240467071533, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0000001192092896, 0.6907809972763062, 0.0, 0.0, 0.0, 0.7170273065567017, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6526276469230652, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6733701229095459, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.6502035856246948, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6907809972763062, 0.9999999403953552, 0.672892689704895, 0.685321569442749, 0.7769080996513367, 0.7272926568984985, 0.0, 0.0, 0.0, 0.0, 0.6522883772850037, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6786181926727295, 0.0, 0.7011789679527283, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6951940059661865, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.672892689704895, 0.9999997615814209, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6952240467071533, 0.0, 0.685321569442749, 0.0, 0.9999998807907104, 0.0, 0.7840834856033325, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7769080996513367, 0.0, 0.0, 1.0000001192092896, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6598961353302002, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.6958160996437073, 0.0, 0.0, 0.6530612111091614, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7170273065567017, 0.7272926568984985, 0.0, 0.7840834856033325, 0.0, 0.9999998807907104, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7050776481628418, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7737337946891785, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7101197242736816, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6769189834594727, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.000000238418579, 0.8265296816825867, 0.8581167459487915, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.669690728187561, 0.0, 0.7074393033981323, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8265296816825867, 0.9999998211860657, 0.7791086435317993, 0.0, 0.0, 0.0, 0.6935023069381714, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6540157794952393, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6954078674316406, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.6555718779563904, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8581167459487915, 0.7791086435317993, 0.9999997615814209, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6668874025344849, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.000000238418579, 0.0, 0.7720992565155029, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7052055597305298, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6522883772850037, 0.0, 0.0, 0.6598961353302002, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9999999403953552, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7578911185264587, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.753311038017273], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7720992565155029, 0.0, 0.9999998211860657, 0.0, 0.0, 0.0, 0.6655914187431335, 0.7161376476287842, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.681480348110199, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6935023069381714, 0.0, 0.0, 0.0, 0.0, 1.0, 0.7098946571350098, 0.0, 0.0, 0.0, 0.0, 0.6541867256164551, 0.0, 0.0, 0.0, 0.0, 0.0, 0.659221887588501, 0.0, 0.0, 0.0, 0.6735203266143799, 0.0, 0.0, 0.0, 0.7983579635620117, 0.0, 0.6907621622085571, 0.0, 0.6519984602928162, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6689925193786621, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.7780680656433105, 0.6623960733413696, 0.7868667244911194, 0.751106858253479, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7050776481628418, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7098946571350098, 0.9999997615814209, 0.6616532802581787, 0.6998007297515869, 0.6589071750640869, 0.0, 0.7091624736785889, 0.0, 0.0, 0.7833598852157593, 0.8540681600570679, 0.0, 0.0, 0.7130797505378723, 0.0, 0.69356369972229, 0.6857261657714844, 0.0, 0.0, 0.0, 0.7198702096939087, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6879551410675049, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6841943264007568, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6789557933807373], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6616532802581787, 0.9999998807907104, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6722376346588135, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.7553563117980957, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6655914187431335, 0.0, 0.6998007297515869, 0.0, 1.0, 0.7429388761520386, 0.0, 0.0, 0.0, 0.0, 0.724615216255188, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6841098666191101, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7161376476287842, 0.0, 0.6589071750640869, 0.0, 0.7429388761520386, 0.9999997019767761, 0.0, 0.0, 0.0, 0.0, 0.6675571203231812, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.6643235683441162, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6541867256164551, 0.7091624736785889, 0.0, 0.0, 0.0, 0.0, 1.0, 0.7464369535446167, 0.0, 0.7436690926551819, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6519798040390015, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6830549240112305], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7464369535446167, 1.0000001192092896, 0.0, 0.7253044843673706, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9999996423721313, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7833598852157593, 0.6722376346588135, 0.724615216255188, 0.6675571203231812, 0.6643235683441162, 0.7436690926551819, 0.7253044843673706, 0.0, 1.0000003576278687, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6880747675895691], [0.0, 0.8123884201049805, 0.0, 0.7302899360656738, 0.7720210552215576, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7737337946891785, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8540681600570679, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.000000238418579, 0.6633923053741455, 0.0, 0.7623034715652466, 0.0, 0.6818150877952576, 0.0, 0.0, 0.0, 0.0, 0.6954092979431152, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7806999087333679, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6923161745071411, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6633923053741455, 0.9999999403953552, 0.7511826157569885, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6540157794952393, 0.0, 0.0, 0.0, 0.0, 0.659221887588501, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7511826157569885, 1.0, 0.0, 0.7123632431030273, 0.0, 0.0, 0.6760261058807373, 0.0, 0.0, 0.7215151786804199, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7114161252975464, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.765268087387085, 0.0, 0.6671428084373474, 0.7732133269309998, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7130797505378723, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7623034715652466, 0.0, 0.0, 1.000000238418579, 0.0, 0.8077384233474731, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6852430105209351, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7123632431030273, 0.0, 0.9999997615814209, 0.0, 0.0, 0.9169597029685974, 0.0, 0.0, 0.684135913848877, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6696297526359558, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.7551658153533936, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.69356369972229, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6818150877952576, 0.0, 0.0, 0.8077384233474731, 0.0, 0.9999997615814209, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6712789535522461, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6735203266143799, 0.6857261657714844, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.7513048648834229, 0.0, 0.7772164344787598, 0.0, 0.7037050724029541, 0.0, 0.674832820892334, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6642439365386963, 0.6716680526733398, 0.0, 0.6603896617889404, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6760261058807373, 0.0, 0.9169597029685974, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.669690728187561, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9999996423721313, 0.0, 0.6942130327224731, 0.7535178661346436, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.7226804494857788, 0.0, 0.0, 0.0, 0.6803867220878601, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6526276469230652, 0.6786181926727295, 0.0, 0.0, 0.0, 0.7101197242736816, 0.7074393033981323, 0.6954078674316406, 0.0, 0.0, 0.0, 0.0, 0.7983579635620117, 0.7198702096939087, 0.0, 0.6841098666191101, 0.0, 0.0, 0.6519798040390015, 0.0, 0.0, 0.0, 0.6954092979431152, 0.0, 0.7215151786804199, 0.0, 0.684135913848877, 0.0, 0.7513048648834229, 0.0, 0.6942130327224731, 0.0, 1.000000238418579, 0.0, 0.7603398561477661, 0.0, 0.6742476224899292, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7133729457855225, 0.7018336057662964, 0.0, 0.0, 0.7299808263778687, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7535178661346436, 0.0, 0.0, 0.9999999403953552, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6583853960037231, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7011789679527283, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6907621622085571, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7772164344787598, 0.0, 0.0, 0.0, 0.7603398561477661, 0.0, 1.0000001192092896, 0.7605697512626648, 0.8325674533843994, 0.8854479193687439, 0.7857601046562195, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7201800346374512, 0.0, 0.0, 0.7332148551940918, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7605697512626648, 1.0000001192092896, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6519984602928162, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7037050724029541, 0.0, 0.0, 0.0, 0.6742476224899292, 0.0, 0.8325674533843994, 0.0, 0.9999998807907104, 0.8045433759689331, 0.6687447428703308, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6538225412368774, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.8854479193687439, 0.0, 0.8045433759689331, 1.0000003576278687, 0.7530494928359985, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.674832820892334, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7857601046562195, 0.0, 0.6687447428703308, 0.7530494928359985, 0.9999999403953552, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7029730677604675, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6677312850952148, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7052055597305298, 0.0, 0.681480348110199, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.6664921045303345, 0.0, 0.6706030964851379, 0.7066022753715515, 0.0, 0.0, 0.0, 0.0, 0.6789309978485107, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6769189834594727, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6879551410675049, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7806999087333679, 0.0, 0.0, 0.6852430105209351, 0.0, 0.6712789535522461, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.000000238418579, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6857025623321533, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9999996423721313, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9999997615814209, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0000001192092896, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7578911185264587, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9999999403953552, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9999998211860657, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.6854588985443115, 0.0, 0.0, 0.6585502028465271, 0.0, 0.6807650923728943, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6841943264007568, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6923161745071411, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6857025623321533, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.999999463558197, 0.6741712093353271, 0.0, 0.0, 0.0, 0.7039247751235962, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6741712093353271, 1.000000238418579, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.000000238418579, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.8270643353462219, 0.0, 0.0, 0.820601224899292, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6696297526359558, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9999997615814209, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6583853960037231, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9999998807907104, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7114161252975464, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7133729457855225, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7039247751235962, 0.0, 0.0, 0.0, 0.0, 1.000000238418579, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6689925193786621, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6642439365386963, 0.0, 0.0, 0.0, 0.7018336057662964, 0.0, 0.7201800346374512, 0.0, 0.6538225412368774, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0000003576278687, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6716680526733398, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.7029730677604675, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9999998807907104, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6733701229095459, 0.6951940059661865, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6603896617889404, 0.0, 0.0, 0.0, 0.7299808263778687, 0.0, 0.7332148551940918, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.000000238418579, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.6983104944229126, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9999998807907104, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.9999999403953552, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.000000238418579, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.753311038017273, 0.0, 0.0, 0.6789557933807373, 0.0, 0.0, 0.0, 0.0, 0.6830549240112305, 0.0, 0.0, 0.6880747675895691, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0]]}],\n",
" {\"font\": {\"family\": \"Courier New, monospace\", \"size\": 12}, \"height\": 800, \"margin\": {\"b\": 40, \"l\": 20, \"r\": 30, \"t\": 50}, \"paper_bgcolor\": \"LightSteelBlue\", \"template\": {\"data\": {\"bar\": [{\"error_x\": {\"color\": \"#2a3f5f\"}, \"error_y\": {\"color\": \"#2a3f5f\"}, \"marker\": {\"line\": {\"color\": \"#E5ECF6\", \"width\": 0.5}}, \"type\": \"bar\"}], \"barpolar\": [{\"marker\": {\"line\": {\"color\": \"#E5ECF6\", \"width\": 0.5}}, \"type\": \"barpolar\"}], \"carpet\": [{\"aaxis\": {\"endlinecolor\": \"#2a3f5f\", \"gridcolor\": \"white\", \"linecolor\": \"white\", \"minorgridcolor\": \"white\", \"startlinecolor\": \"#2a3f5f\"}, \"baxis\": {\"endlinecolor\": \"#2a3f5f\", \"gridcolor\": \"white\", \"linecolor\": \"white\", \"minorgridcolor\": \"white\", \"startlinecolor\": \"#2a3f5f\"}, \"type\": \"carpet\"}], \"choropleth\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"type\": \"choropleth\"}], \"contour\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"contour\"}], \"contourcarpet\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"type\": \"contourcarpet\"}], \"heatmap\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"heatmap\"}], \"heatmapgl\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"heatmapgl\"}], \"histogram\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"histogram\"}], \"histogram2d\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"histogram2d\"}], \"histogram2dcontour\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"histogram2dcontour\"}], \"mesh3d\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"type\": \"mesh3d\"}], \"parcoords\": [{\"line\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"parcoords\"}], \"pie\": [{\"automargin\": true, \"type\": \"pie\"}], \"scatter\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scatter\"}], \"scatter3d\": [{\"line\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scatter3d\"}], \"scattercarpet\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scattercarpet\"}], \"scattergeo\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scattergeo\"}], \"scattergl\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scattergl\"}], \"scattermapbox\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scattermapbox\"}], \"scatterpolar\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scatterpolar\"}], \"scatterpolargl\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scatterpolargl\"}], \"scatterternary\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"scatterternary\"}], \"surface\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"type\": \"surface\"}], \"table\": [{\"cells\": {\"fill\": {\"color\": \"#EBF0F8\"}, \"line\": {\"color\": \"white\"}}, \"header\": {\"fill\": {\"color\": \"#C8D4E3\"}, \"line\": {\"color\": \"white\"}}, \"type\": \"table\"}]}, \"layout\": {\"annotationdefaults\": {\"arrowcolor\": \"#2a3f5f\", \"arrowhead\": 0, \"arrowwidth\": 1}, \"coloraxis\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"colorscale\": {\"diverging\": [[0, \"#8e0152\"], [0.1, \"#c51b7d\"], [0.2, \"#de77ae\"], [0.3, \"#f1b6da\"], [0.4, \"#fde0ef\"], [0.5, \"#f7f7f7\"], [0.6, \"#e6f5d0\"], [0.7, \"#b8e186\"], [0.8, \"#7fbc41\"], [0.9, \"#4d9221\"], [1, \"#276419\"]], \"sequential\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]], \"sequentialminus\": [[0.0, \"#0d0887\"], [0.1111111111111111, \"#46039f\"], [0.2222222222222222, \"#7201a8\"], [0.3333333333333333, \"#9c179e\"], [0.4444444444444444, \"#bd3786\"], [0.5555555555555556, \"#d8576b\"], [0.6666666666666666, \"#ed7953\"], [0.7777777777777778, \"#fb9f3a\"], [0.8888888888888888, \"#fdca26\"], [1.0, \"#f0f921\"]]}, \"colorway\": [\"#636efa\", \"#EF553B\", \"#00cc96\", \"#ab63fa\", \"#FFA15A\", \"#19d3f3\", \"#FF6692\", \"#B6E880\", \"#FF97FF\", \"#FECB52\"], \"font\": {\"color\": \"#2a3f5f\"}, \"geo\": {\"bgcolor\": \"white\", \"lakecolor\": \"white\", \"landcolor\": \"#E5ECF6\", \"showlakes\": true, \"showland\": true, \"subunitcolor\": \"white\"}, \"hoverlabel\": {\"align\": \"left\"}, \"hovermode\": \"closest\", \"mapbox\": {\"style\": \"light\"}, \"paper_bgcolor\": \"white\", \"plot_bgcolor\": \"#E5ECF6\", \"polar\": {\"angularaxis\": {\"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\"}, \"bgcolor\": \"#E5ECF6\", \"radialaxis\": {\"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\"}}, \"scene\": {\"xaxis\": {\"backgroundcolor\": \"#E5ECF6\", \"gridcolor\": \"white\", \"gridwidth\": 2, \"linecolor\": \"white\", \"showbackground\": true, \"ticks\": \"\", \"zerolinecolor\": \"white\"}, \"yaxis\": {\"backgroundcolor\": \"#E5ECF6\", \"gridcolor\": \"white\", \"gridwidth\": 2, \"linecolor\": \"white\", \"showbackground\": true, \"ticks\": \"\", \"zerolinecolor\": \"white\"}, \"zaxis\": {\"backgroundcolor\": \"#E5ECF6\", \"gridcolor\": \"white\", \"gridwidth\": 2, \"linecolor\": \"white\", \"showbackground\": true, \"ticks\": \"\", \"zerolinecolor\": \"white\"}}, \"shapedefaults\": {\"line\": {\"color\": \"#2a3f5f\"}}, \"ternary\": {\"aaxis\": {\"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\"}, \"baxis\": {\"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\"}, \"bgcolor\": \"#E5ECF6\", \"caxis\": {\"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\"}}, \"title\": {\"x\": 0.05}, \"xaxis\": {\"automargin\": true, \"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\", \"title\": {\"standoff\": 15}, \"zerolinecolor\": \"white\", \"zerolinewidth\": 2}, \"yaxis\": {\"automargin\": true, \"gridcolor\": \"white\", \"linecolor\": \"white\", \"ticks\": \"\", \"title\": {\"standoff\": 15}, \"zerolinecolor\": \"white\", \"zerolinewidth\": 2}}}, \"title\": {\"text\": \"Service-to-Service Similarity\"}, \"width\": 1000, \"xaxis\": {\"nticks\": 12, \"tickmode\": \"array\", \"ticktext\": [\"No <br>Label\", \"Basic <br>Needs\", \"Consumer <br>Services\", \"Criminal <br>Justiceand <br>LegalServices <br>\", \"Education <br>\", \"Environment and Public Health <br>Safety\", \"Health <br>Care\", \"Income <br>Supportand <br>Employment\", \"Individual <br>andFamily <br>Life\", \"Mental <br>Healthand <br>SubstanceUse <br>DisorderServices <br>\", \"Organizational <br>CommunityInternational Services <br>\", \"Target <br>Populations\"], \"tickvals\": [0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66], \"type\": \"category\"}, \"yaxis\": {\"nticks\": 12, \"tickmode\": \"array\", \"ticktext\": [\"No <br>Label\", \"Basic <br>Needs\", \"Consumer <br>Services\", \"Criminal <br>Justiceand <br>LegalServices <br>\", \"Education <br>\", \"Environment and Public Health <br>Safety\", \"Health <br>Care\", \"Income <br>Supportand <br>Employment\", \"Individual <br>andFamily <br>Life\", \"Mental <br>Healthand <br>SubstanceUse <br>DisorderServices <br>\", \"Organizational <br>CommunityInternational Services <br>\", \"Target <br>Populations\"], \"tickvals\": [0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66], \"type\": \"category\"}},\n",
" {\"responsive\": true}\n",
" ).then(function(){\n",
" \n",
"var gd = document.getElementById('c559721a-70c2-4189-b1ba-d52990f8089d');\n",
"var x = new MutationObserver(function (mutations, observer) {{\n",
" var display = window.getComputedStyle(gd).display;\n",
" if (!display || display === 'none') {{\n",
" console.log([gd, 'removed!']);\n",
" Plotly.purge(gd);\n",
" observer.disconnect();\n",
" }}\n",
"}});\n",
"\n",
"// Listen for the removal of the full notebook cells\n",
"var notebookContainer = gd.closest('#notebook-container');\n",
"if (notebookContainer) {{\n",
" x.observe(notebookContainer, {childList: true});\n",
"}}\n",
"\n",
"// Listen for the clearing of the current output cell\n",
"var outputEl = gd.closest('.output');\n",
"if (outputEl) {{\n",
" x.observe(outputEl, {childList: true});\n",
"}}\n",
"\n",
" })\n",
" };\n",
" \n",
" </script>\n",
" </div>\n",
"</body>\n",
"</html>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "smCdZ2VwLcAp",
"colab_type": "code",
"colab": {}
},
"source": [
""
],
"execution_count": 0,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment