Created
May 14, 2021 22:58
-
-
Save benjeffery/36f7db027a0b9f055c5be1a905a075a6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"id": "f87b61b7", | |
"metadata": {}, | |
"source": [ | |
"## TSKIT 0.3.6\n", | |
"\n", | |
"Minor feature release" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"id": "41fc8c48", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 1;\n", | |
" var nbb_unformatted_code = \"import tskit\\nimport msprime\\nimport numpy as np\\nfrom IPython.display import SVG\\n\\n%load_ext nb_black\";\n", | |
" var nbb_formatted_code = \"import tskit\\nimport msprime\\nimport numpy as np\\nfrom IPython.display import SVG\\n\\n%load_ext nb_black\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"import tskit\n", | |
"import msprime\n", | |
"import numpy as np\n", | |
"from IPython.display import SVG\n", | |
"\n", | |
"%load_ext nb_black" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"id": "ff5606bf", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"'0.3.6'" | |
] | |
}, | |
"execution_count": 2, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 2;\n", | |
" var nbb_unformatted_code = \"tskit.__version__\";\n", | |
" var nbb_formatted_code = \"tskit.__version__\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"tskit.__version__" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "2d5e862f", | |
"metadata": {}, | |
"source": [ | |
"## `table.append` and table row dataclasses\n", | |
"The pre-existing `add_row` method on a table takes the information for a table row as arguments.\n", | |
"This could be clunky, if you had to extract info from an object.\n", | |
"\n", | |
"New method `append` takes any object that has the information as attributes." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "f8f42411", | |
"metadata": {}, | |
"source": [ | |
"A common use case is rewriting a table, making some modification.\n", | |
"Heres the old way:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"id": "d406cce1", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 3;\n", | |
" var nbb_unformatted_code = \"tables = msprime.sim_ancestry(5).dump_tables()\\nindividuals = tables.individuals\";\n", | |
" var nbb_formatted_code = \"tables = msprime.sim_ancestry(5).dump_tables()\\nindividuals = tables.individuals\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"tables = msprime.sim_ancestry(5).dump_tables()\n", | |
"individuals = tables.individuals" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"id": "49af92bf", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div>\n", | |
" <style scoped=\"\">\n", | |
" .tskit-table tbody tr th:only-of-type {vertical-align: middle;}\n", | |
" .tskit-table tbody tr th {vertical-align: top;}\n", | |
" .tskit-table tbody td {text-align: right;padding: 0.5em 0.5em;}\n", | |
" .tskit-table tbody th {padding: 0.5em 0.5em;}\n", | |
" </style>\n", | |
" <table border=\"1\" class=\"tskit-table\">\n", | |
" <thead>\n", | |
" <tr>\n", | |
" <th>id</th><th>flags</th><th>location</th><th>parents</th><th>metadata</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><td>0</td><td>0</td><td></td><td></td><td>b''</td></tr>\n", | |
"<tr><td>1</td><td>0</td><td></td><td></td><td>b''</td></tr>\n", | |
"<tr><td>2</td><td>0</td><td></td><td></td><td>b''</td></tr>\n", | |
"<tr><td>3</td><td>0</td><td></td><td></td><td>b''</td></tr>\n", | |
"<tr><td>4</td><td>0</td><td></td><td></td><td>b''</td></tr>\n", | |
"\n", | |
" </tbody>\n", | |
" </table>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
"<tskit.tables.IndividualTable at 0x7fcd588b1cd0>" | |
] | |
}, | |
"execution_count": 4, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 4;\n", | |
" var nbb_unformatted_code = \"individuals\";\n", | |
" var nbb_formatted_code = \"individuals\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"individuals" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"id": "e45af4fb", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 5;\n", | |
" var nbb_unformatted_code = \"individuals_copy = tables.individuals.copy()\\nindividuals.clear()\\nindividuals.metadata_schema = tskit.MetadataSchema({\\\"codec\\\": \\\"json\\\"})\\nfor individual in individuals_copy:\\n individuals.add_row(\\n flags=individual.flags,\\n location=[5, 5],\\n parents=individual.parents,\\n metadata={\\\"example\\\": \\\"data\\\"},\\n )\";\n", | |
" var nbb_formatted_code = \"individuals_copy = tables.individuals.copy()\\nindividuals.clear()\\nindividuals.metadata_schema = tskit.MetadataSchema({\\\"codec\\\": \\\"json\\\"})\\nfor individual in individuals_copy:\\n individuals.add_row(\\n flags=individual.flags,\\n location=[5, 5],\\n parents=individual.parents,\\n metadata={\\\"example\\\": \\\"data\\\"},\\n )\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"individuals_copy = tables.individuals.copy()\n", | |
"individuals.clear()\n", | |
"individuals.metadata_schema = tskit.MetadataSchema({\"codec\": \"json\"})\n", | |
"for individual in individuals_copy:\n", | |
" individuals.add_row(\n", | |
" flags=individual.flags,\n", | |
" location=[5, 5],\n", | |
" parents=individual.parents,\n", | |
" metadata={\"example\": \"data\"},\n", | |
" )" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"id": "0ad805b9", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div>\n", | |
" <style scoped=\"\">\n", | |
" .tskit-table tbody tr th:only-of-type {vertical-align: middle;}\n", | |
" .tskit-table tbody tr th {vertical-align: top;}\n", | |
" .tskit-table tbody td {text-align: right;padding: 0.5em 0.5em;}\n", | |
" .tskit-table tbody th {padding: 0.5em 0.5em;}\n", | |
" </style>\n", | |
" <table border=\"1\" class=\"tskit-table\">\n", | |
" <thead>\n", | |
" <tr>\n", | |
" <th>id</th><th>flags</th><th>location</th><th>parents</th><th>metadata</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><td>0</td><td>0</td><td>5.0, 5.0</td><td></td><td>{'example': 'data'}</td></tr>\n", | |
"<tr><td>1</td><td>0</td><td>5.0, 5.0</td><td></td><td>{'example': 'data'}</td></tr>\n", | |
"<tr><td>2</td><td>0</td><td>5.0, 5.0</td><td></td><td>{'example': 'data'}</td></tr>\n", | |
"<tr><td>3</td><td>0</td><td>5.0, 5.0</td><td></td><td>{'example': 'data'}</td></tr>\n", | |
"<tr><td>4</td><td>0</td><td>5.0, 5.0</td><td></td><td>{'example': 'data'}</td></tr>\n", | |
"\n", | |
" </tbody>\n", | |
" </table>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
"<tskit.tables.IndividualTable at 0x7fcd588b1cd0>" | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 6;\n", | |
" var nbb_unformatted_code = \"individuals\";\n", | |
" var nbb_formatted_code = \"individuals\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"individuals" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "aefe0101", | |
"metadata": {}, | |
"source": [ | |
"The new way, with append. As table row objects are now Python dataclasses in 0.3.6 they have handy methods like `replace` that we can use with `append`:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"id": "4d558965", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 7;\n", | |
" var nbb_unformatted_code = \"individuals_copy = tables.individuals.copy()\\ntables.individuals.clear()\\nfor individual in individuals_copy:\\n individuals.append(individual.replace(location=[6, 6]))\";\n", | |
" var nbb_formatted_code = \"individuals_copy = tables.individuals.copy()\\ntables.individuals.clear()\\nfor individual in individuals_copy:\\n individuals.append(individual.replace(location=[6, 6]))\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"individuals_copy = tables.individuals.copy()\n", | |
"tables.individuals.clear()\n", | |
"for individual in individuals_copy:\n", | |
" individuals.append(individual.replace(location=[6, 6]))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"id": "f0b61336", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div>\n", | |
" <style scoped=\"\">\n", | |
" .tskit-table tbody tr th:only-of-type {vertical-align: middle;}\n", | |
" .tskit-table tbody tr th {vertical-align: top;}\n", | |
" .tskit-table tbody td {text-align: right;padding: 0.5em 0.5em;}\n", | |
" .tskit-table tbody th {padding: 0.5em 0.5em;}\n", | |
" </style>\n", | |
" <table border=\"1\" class=\"tskit-table\">\n", | |
" <thead>\n", | |
" <tr>\n", | |
" <th>id</th><th>flags</th><th>location</th><th>parents</th><th>metadata</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><td>0</td><td>0</td><td>6.0, 6.0</td><td></td><td>{'example': 'data'}</td></tr>\n", | |
"<tr><td>1</td><td>0</td><td>6.0, 6.0</td><td></td><td>{'example': 'data'}</td></tr>\n", | |
"<tr><td>2</td><td>0</td><td>6.0, 6.0</td><td></td><td>{'example': 'data'}</td></tr>\n", | |
"<tr><td>3</td><td>0</td><td>6.0, 6.0</td><td></td><td>{'example': 'data'}</td></tr>\n", | |
"<tr><td>4</td><td>0</td><td>6.0, 6.0</td><td></td><td>{'example': 'data'}</td></tr>\n", | |
"\n", | |
" </tbody>\n", | |
" </table>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
"<tskit.tables.IndividualTable at 0x7fcd588b1cd0>" | |
] | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 8;\n", | |
" var nbb_unformatted_code = \"individuals\";\n", | |
" var nbb_formatted_code = \"individuals\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"individuals" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "31c5f99d", | |
"metadata": {}, | |
"source": [ | |
"This is not only shorter, but any new columns will be handled properly! Not only table rows work, but any class which has the right attributes." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "7d7fa6b1", | |
"metadata": {}, | |
"source": [ | |
"## Notebook display improvements\n", | |
"`Tree` now has an info table for the CLI and notebooks." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"id": "fd9298f2", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 9;\n", | |
" var nbb_unformatted_code = \"tree = tskit.Tree.generate_balanced(9)\";\n", | |
" var nbb_formatted_code = \"tree = tskit.Tree.generate_balanced(9)\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"tree = tskit.Tree.generate_balanced(9)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"id": "41b0eafa", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div>\n", | |
" <style>\n", | |
" .tskit-table thead tr th {text-align: left;padding: 0.5em 0.5em;}\n", | |
" .tskit-table tbody tr td {padding: 0.5em 0.5em;}\n", | |
" .tskit-table tbody tr td:first-of-type {text-align: left;}\n", | |
" .tskit-details-label {vertical-align: top; padding-right:5px;}\n", | |
" .tskit-table-set {display: inline-flex;flex-wrap: wrap;margin: -12px 0 0 -12px;width: calc(100% + 12px);}\n", | |
" .tskit-table-set-table {margin: 12px 0 0 12px;}\n", | |
" details {display: inline-block;}\n", | |
" summary {cursor: pointer; outline: 0; display: list-item;}\n", | |
" </style>\n", | |
" <div class=\"tskit-table-set\">\n", | |
" <div class=\"tskit-table-set-table\">\n", | |
" <table class=\"tskit-table\">\n", | |
" <thead>\n", | |
" <tr>\n", | |
" <th style=\"padding:0;line-height:21px;\">\n", | |
" <img style=\"height: 32px;display: inline-block;padding: 3px 5px 3px 0;\" src=\"https://raw.githubusercontent.com/tskit-dev/administrative/main/tskit_logo.svg\"/>\n", | |
" <a target=\"_blank\" href=\"https://tskit.readthedocs.io/en/latest/python-api.html#the-tree-class\"> Tree </a>\n", | |
" </th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><td>Index</td><td>0</td></tr>\n", | |
" <tr><td>Interval</td><td>0-1 (1)</td></tr>\n", | |
" <tr><td>Roots</td><td>1</td></tr>\n", | |
" <tr><td>Nodes</td><td>17</td></tr>\n", | |
" <tr><td>Sites</td><td>0</td></tr>\n", | |
" <tr><td>Mutations</td><td>0</td></tr>\n", | |
" <tr><td>Total Branch Length</td><td>19</td></tr>\n", | |
" </tbody>\n", | |
" </table>\n", | |
" </div>\n", | |
" </div>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
"<tskit.trees.Tree at 0x7fcd58073310>" | |
] | |
}, | |
"execution_count": 10, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 10;\n", | |
" var nbb_unformatted_code = \"tree\";\n", | |
" var nbb_formatted_code = \"tree\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"tree" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"id": "d73547a9", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"╔═══════════════════════════╗\n", | |
"║Tree ║\n", | |
"╠═══════════════════╤═══════╣\n", | |
"║Index │ 0║\n", | |
"╟───────────────────┼───────╢\n", | |
"║Interval │0-1 (1)║\n", | |
"╟───────────────────┼───────╢\n", | |
"║Roots │ 1║\n", | |
"╟───────────────────┼───────╢\n", | |
"║Nodes │ 17║\n", | |
"╟───────────────────┼───────╢\n", | |
"║Sites │ 0║\n", | |
"╟───────────────────┼───────╢\n", | |
"║Mutations │ 0║\n", | |
"╟───────────────────┼───────╢\n", | |
"║Total Branch Length│ 19║\n", | |
"╚═══════════════════╧═══════╝\n", | |
"\n" | |
] | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 11;\n", | |
" var nbb_unformatted_code = \"print(tree)\";\n", | |
" var nbb_formatted_code = \"print(tree)\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"print(tree)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "d8373523", | |
"metadata": {}, | |
"source": [ | |
"Tables are now truncated when long, controllable via `tskit.set_print_options`" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"id": "5ad2610c", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div>\n", | |
" <style scoped=\"\">\n", | |
" .tskit-table tbody tr th:only-of-type {vertical-align: middle;}\n", | |
" .tskit-table tbody tr th {vertical-align: top;}\n", | |
" .tskit-table tbody td {text-align: right;padding: 0.5em 0.5em;}\n", | |
" .tskit-table tbody th {padding: 0.5em 0.5em;}\n", | |
" </style>\n", | |
" <table border=\"1\" class=\"tskit-table\">\n", | |
" <thead>\n", | |
" <tr>\n", | |
" <th>id</th><th>left</th><th>right</th><th>parent</th><th>child</th><th>metadata</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><td>0</td><td>0.00000000</td><td>1.00000000</td><td>200</td><td>2</td><td>b''</td></tr>\n", | |
"<tr><td>1</td><td>0.00000000</td><td>1.00000000</td><td>200</td><td>145</td><td>b''</td></tr>\n", | |
"<tr><td>2</td><td>0.00000000</td><td>1.00000000</td><td>201</td><td>100</td><td>b''</td></tr>\n", | |
"<tr><td>3</td><td>0.00000000</td><td>1.00000000</td><td>201</td><td>172</td><td>b''</td></tr>\n", | |
"<tr><td>4</td><td>0.00000000</td><td>1.00000000</td><td>202</td><td>52</td><td>b''</td></tr>\n", | |
"<tr><td>5</td><td>0.00000000</td><td>1.00000000</td><td>202</td><td>55</td><td>b''</td></tr>\n", | |
"<tr><td>6</td><td>0.00000000</td><td>1.00000000</td><td>203</td><td>114</td><td>b''</td></tr>\n", | |
"<tr><td>7</td><td>0.00000000</td><td>1.00000000</td><td>203</td><td>148</td><td>b''</td></tr>\n", | |
"<tr><td>8</td><td>0.00000000</td><td>1.00000000</td><td>204</td><td>35</td><td>b''</td></tr>\n", | |
"<tr><td>9</td><td>0.00000000</td><td>1.00000000</td><td>204</td><td>132</td><td>b''</td></tr>\n", | |
"<tr><td>10</td><td>0.00000000</td><td>1.00000000</td><td>205</td><td>176</td><td>b''</td></tr>\n", | |
"<tr><td>11</td><td>0.00000000</td><td>1.00000000</td><td>205</td><td>198</td><td>b''</td></tr>\n", | |
"<tr><td>12</td><td>0.00000000</td><td>1.00000000</td><td>206</td><td>109</td><td>b''</td></tr>\n", | |
"<tr><td>13</td><td>0.00000000</td><td>1.00000000</td><td>206</td><td>121</td><td>b''</td></tr>\n", | |
"<tr><td>14</td><td>0.00000000</td><td>1.00000000</td><td>207</td><td>116</td><td>b''</td></tr>\n", | |
"<tr><td>15</td><td>0.00000000</td><td>1.00000000</td><td>207</td><td>140</td><td>b''</td></tr>\n", | |
"<tr><td>16</td><td>0.00000000</td><td>1.00000000</td><td>208</td><td>41</td><td>b''</td></tr>\n", | |
"<tr><td>17</td><td>0.00000000</td><td>1.00000000</td><td>208</td><td>106</td><td>b''</td></tr>\n", | |
"<tr><td>18</td><td>0.00000000</td><td>1.00000000</td><td>209</td><td>7</td><td>b''</td></tr>\n", | |
"<tr><td>19</td><td>0.00000000</td><td>1.00000000</td><td>209</td><td>200</td><td>b''</td></tr>\n", | |
"<tr><td style=\"text-align: center;\" colspan=\"84\"><em>358 rows skipped (tskit.set_print_options)</em></td></tr>\n", | |
"<tr><td>378</td><td>0.00000000</td><td>1.00000000</td><td>389</td><td>371</td><td>b''</td></tr>\n", | |
"<tr><td>379</td><td>0.00000000</td><td>1.00000000</td><td>389</td><td>383</td><td>b''</td></tr>\n", | |
"<tr><td>380</td><td>0.00000000</td><td>1.00000000</td><td>390</td><td>345</td><td>b''</td></tr>\n", | |
"<tr><td>381</td><td>0.00000000</td><td>1.00000000</td><td>390</td><td>389</td><td>b''</td></tr>\n", | |
"<tr><td>382</td><td>0.00000000</td><td>1.00000000</td><td>391</td><td>386</td><td>b''</td></tr>\n", | |
"<tr><td>383</td><td>0.00000000</td><td>1.00000000</td><td>391</td><td>390</td><td>b''</td></tr>\n", | |
"<tr><td>384</td><td>0.00000000</td><td>1.00000000</td><td>392</td><td>276</td><td>b''</td></tr>\n", | |
"<tr><td>385</td><td>0.00000000</td><td>1.00000000</td><td>392</td><td>391</td><td>b''</td></tr>\n", | |
"<tr><td>386</td><td>0.00000000</td><td>1.00000000</td><td>393</td><td>381</td><td>b''</td></tr>\n", | |
"<tr><td>387</td><td>0.00000000</td><td>1.00000000</td><td>393</td><td>387</td><td>b''</td></tr>\n", | |
"<tr><td>388</td><td>0.00000000</td><td>1.00000000</td><td>394</td><td>388</td><td>b''</td></tr>\n", | |
"<tr><td>389</td><td>0.00000000</td><td>1.00000000</td><td>394</td><td>392</td><td>b''</td></tr>\n", | |
"<tr><td>390</td><td>0.00000000</td><td>1.00000000</td><td>395</td><td>370</td><td>b''</td></tr>\n", | |
"<tr><td>391</td><td>0.00000000</td><td>1.00000000</td><td>395</td><td>393</td><td>b''</td></tr>\n", | |
"<tr><td>392</td><td>0.00000000</td><td>1.00000000</td><td>396</td><td>361</td><td>b''</td></tr>\n", | |
"<tr><td>393</td><td>0.00000000</td><td>1.00000000</td><td>396</td><td>395</td><td>b''</td></tr>\n", | |
"<tr><td>394</td><td>0.00000000</td><td>1.00000000</td><td>397</td><td>333</td><td>b''</td></tr>\n", | |
"<tr><td>395</td><td>0.00000000</td><td>1.00000000</td><td>397</td><td>396</td><td>b''</td></tr>\n", | |
"<tr><td>396</td><td>0.00000000</td><td>1.00000000</td><td>398</td><td>394</td><td>b''</td></tr>\n", | |
"<tr><td>397</td><td>0.00000000</td><td>1.00000000</td><td>398</td><td>397</td><td>b''</td></tr>\n", | |
"\n", | |
" </tbody>\n", | |
" </table>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
"<tskit.tables.EdgeTable at 0x7fcd5806fc70>" | |
] | |
}, | |
"execution_count": 12, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 12;\n", | |
" var nbb_unformatted_code = \"edges = msprime.sim_ancestry(100).tables.edges\\nedges\";\n", | |
" var nbb_formatted_code = \"edges = msprime.sim_ancestry(100).tables.edges\\nedges\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"edges = msprime.sim_ancestry(100).tables.edges\n", | |
"edges" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"id": "1baaa26d", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 13;\n", | |
" var nbb_unformatted_code = \"tskit.set_print_options(max_lines=10)\";\n", | |
" var nbb_formatted_code = \"tskit.set_print_options(max_lines=10)\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"tskit.set_print_options(max_lines=10)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"id": "c82e4f19", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div>\n", | |
" <style scoped=\"\">\n", | |
" .tskit-table tbody tr th:only-of-type {vertical-align: middle;}\n", | |
" .tskit-table tbody tr th {vertical-align: top;}\n", | |
" .tskit-table tbody td {text-align: right;padding: 0.5em 0.5em;}\n", | |
" .tskit-table tbody th {padding: 0.5em 0.5em;}\n", | |
" </style>\n", | |
" <table border=\"1\" class=\"tskit-table\">\n", | |
" <thead>\n", | |
" <tr>\n", | |
" <th>id</th><th>left</th><th>right</th><th>parent</th><th>child</th><th>metadata</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><td>0</td><td>0.00000000</td><td>1.00000000</td><td>200</td><td>2</td><td>b''</td></tr>\n", | |
"<tr><td>1</td><td>0.00000000</td><td>1.00000000</td><td>200</td><td>145</td><td>b''</td></tr>\n", | |
"<tr><td>2</td><td>0.00000000</td><td>1.00000000</td><td>201</td><td>100</td><td>b''</td></tr>\n", | |
"<tr><td>3</td><td>0.00000000</td><td>1.00000000</td><td>201</td><td>172</td><td>b''</td></tr>\n", | |
"<tr><td>4</td><td>0.00000000</td><td>1.00000000</td><td>202</td><td>52</td><td>b''</td></tr>\n", | |
"<tr><td style=\"text-align: center;\" colspan=\"84\"><em>388 rows skipped (tskit.set_print_options)</em></td></tr>\n", | |
"<tr><td>393</td><td>0.00000000</td><td>1.00000000</td><td>396</td><td>395</td><td>b''</td></tr>\n", | |
"<tr><td>394</td><td>0.00000000</td><td>1.00000000</td><td>397</td><td>333</td><td>b''</td></tr>\n", | |
"<tr><td>395</td><td>0.00000000</td><td>1.00000000</td><td>397</td><td>396</td><td>b''</td></tr>\n", | |
"<tr><td>396</td><td>0.00000000</td><td>1.00000000</td><td>398</td><td>394</td><td>b''</td></tr>\n", | |
"<tr><td>397</td><td>0.00000000</td><td>1.00000000</td><td>398</td><td>397</td><td>b''</td></tr>\n", | |
"\n", | |
" </tbody>\n", | |
" </table>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
"<tskit.tables.EdgeTable at 0x7fcd5806fc70>" | |
] | |
}, | |
"execution_count": 14, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 14;\n", | |
" var nbb_unformatted_code = \"edges\";\n", | |
" var nbb_formatted_code = \"edges\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"edges" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"id": "f91e272c", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"╔═══╤══════════╤══════════╤══════╤═════╤════════╗\n", | |
"║id │left │right │parent│child│metadata║\n", | |
"╠═══╪══════════╪══════════╪══════╪═════╪════════╣\n", | |
"║0 │0.00000000│1.00000000│ 200│ 2│ b''║\n", | |
"║1 │0.00000000│1.00000000│ 200│ 145│ b''║\n", | |
"║2 │0.00000000│1.00000000│ 201│ 100│ b''║\n", | |
"║3 │0.00000000│1.00000000│ 201│ 172│ b''║\n", | |
"║4 │0.00000000│1.00000000│ 202│ 52│ b''║\n", | |
"║ 388 rows skipped (tskit.set_print_options) ║\n", | |
"║393│0.00000000│1.00000000│ 396│ 395│ b''║\n", | |
"║394│0.00000000│1.00000000│ 397│ 333│ b''║\n", | |
"║395│0.00000000│1.00000000│ 397│ 396│ b''║\n", | |
"║396│0.00000000│1.00000000│ 398│ 394│ b''║\n", | |
"║397│0.00000000│1.00000000│ 398│ 397│ b''║\n", | |
"╚═══╧══════════╧══════════╧══════╧═════╧════════╝\n", | |
"\n" | |
] | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 15;\n", | |
" var nbb_unformatted_code = \"print(edges)\";\n", | |
" var nbb_formatted_code = \"print(edges)\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"print(edges)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "8f709c31", | |
"metadata": {}, | |
"source": [ | |
"## `assert_equals`\n", | |
"Find out in detail how two table collections differ" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"id": "93faf5e4", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 16;\n", | |
" var nbb_unformatted_code = \"tables = msprime.sim_ancestry(10).tables\\ntables2 = tables.copy()\";\n", | |
" var nbb_formatted_code = \"tables = msprime.sim_ancestry(10).tables\\ntables2 = tables.copy()\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"tables = msprime.sim_ancestry(10).tables\n", | |
"tables2 = tables.copy()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"id": "2b77b363", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"True" | |
] | |
}, | |
"execution_count": 17, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 17;\n", | |
" var nbb_unformatted_code = \"tables == tables2\";\n", | |
" var nbb_formatted_code = \"tables == tables2\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"tables == tables2" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 18, | |
"id": "f274e332", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 18;\n", | |
" var nbb_unformatted_code = \"times = tables2.nodes.time\\ntimes[20] = 42\\ntables2.nodes.time = times\";\n", | |
" var nbb_formatted_code = \"times = tables2.nodes.time\\ntimes[20] = 42\\ntables2.nodes.time = times\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"times = tables2.nodes.time\n", | |
"times[20] = 42\n", | |
"tables2.nodes.time = times" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"id": "29dc0a4b", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"False" | |
] | |
}, | |
"execution_count": 19, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 19;\n", | |
" var nbb_unformatted_code = \"tables == tables2\";\n", | |
" var nbb_formatted_code = \"tables == tables2\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"tables == tables2" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 20, | |
"id": "c1fd3afa", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"ename": "AssertionError", | |
"evalue": "NodeTable row 20 differs:\nself.time=0.010953424900900646 other.time=42.0", | |
"output_type": "error", | |
"traceback": [ | |
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
"\u001b[0;31mAssertionError\u001b[0m Traceback (most recent call last)", | |
"\u001b[0;32m<ipython-input-20-c48efcf349d1>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtables\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0massert_equals\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtables2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", | |
"\u001b[0;32m~/projects/tskit/python/tskit/tables.py\u001b[0m in \u001b[0;36massert_equals\u001b[0;34m(self, other, ignore_metadata, ignore_ts_metadata, ignore_provenance, ignore_timestamps)\u001b[0m\n\u001b[1;32m 2620\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mtable_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtable\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mname_map\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2621\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtable_name\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;34m\"provenances\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2622\u001b[0;31m table.assert_equals(\n\u001b[0m\u001b[1;32m 2623\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mother\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtable_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mignore_metadata\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mignore_metadata\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2624\u001b[0m )\n", | |
"\u001b[0;32m~/projects/tskit/python/tskit/tables.py\u001b[0m in \u001b[0;36massert_equals\u001b[0;34m(self, other, ignore_metadata)\u001b[0m\n\u001b[1;32m 298\u001b[0m )\n\u001b[1;32m 299\u001b[0m \u001b[0mdiff_string\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"\\n\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdiff_string\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 300\u001b[0;31m raise AssertionError(\n\u001b[0m\u001b[1;32m 301\u001b[0m \u001b[0;34mf\"{type(self).__name__} row {n} differs:\\n{diff_string}\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 302\u001b[0m )\n", | |
"\u001b[0;31mAssertionError\u001b[0m: NodeTable row 20 differs:\nself.time=0.010953424900900646 other.time=42.0" | |
] | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 20;\n", | |
" var nbb_unformatted_code = \"tables.assert_equals(tables2)\";\n", | |
" var nbb_formatted_code = \"tables.assert_equals(tables2)\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"tables.assert_equals(tables2)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 21, | |
"id": "9a05e552", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 21;\n", | |
" var nbb_unformatted_code = \"a = msprime.sim_ancestry(10, random_seed=42)\";\n", | |
" var nbb_formatted_code = \"a = msprime.sim_ancestry(10, random_seed=42)\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"a = msprime.sim_ancestry(10, random_seed=42)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 22, | |
"id": "97b6187d", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 22;\n", | |
" var nbb_unformatted_code = \"b = msprime.sim_ancestry(10, random_seed=42)\";\n", | |
" var nbb_formatted_code = \"b = msprime.sim_ancestry(10, random_seed=42)\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"b = msprime.sim_ancestry(10, random_seed=42)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 23, | |
"id": "d251f2c9", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"ename": "AssertionError", | |
"evalue": "ProvenanceTable row 0 differs:\nself.timestamp=2021-05-14T23:54:41.180064 other.timestamp=2021-05-14T23:54:41.866439", | |
"output_type": "error", | |
"traceback": [ | |
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
"\u001b[0;31mAssertionError\u001b[0m Traceback (most recent call last)", | |
"\u001b[0;32m<ipython-input-23-983b5948d9d3>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0ma\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtables\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0massert_equals\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtables\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", | |
"\u001b[0;32m~/projects/tskit/python/tskit/tables.py\u001b[0m in \u001b[0;36massert_equals\u001b[0;34m(self, other, ignore_metadata, ignore_ts_metadata, ignore_provenance, ignore_timestamps)\u001b[0m\n\u001b[1;32m 2625\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2626\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mignore_provenance\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2627\u001b[0;31m self.provenances.assert_equals(\n\u001b[0m\u001b[1;32m 2628\u001b[0m \u001b[0mother\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprovenances\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mignore_timestamps\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mignore_timestamps\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2629\u001b[0m )\n", | |
"\u001b[0;32m~/projects/tskit/python/tskit/tables.py\u001b[0m in \u001b[0;36massert_equals\u001b[0;34m(self, other, ignore_timestamps)\u001b[0m\n\u001b[1;32m 2137\u001b[0m )\n\u001b[1;32m 2138\u001b[0m \u001b[0mdiff_string\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"\\n\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdiff_string\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2139\u001b[0;31m raise AssertionError(\n\u001b[0m\u001b[1;32m 2140\u001b[0m \u001b[0;34mf\"{type(self).__name__} row {n} differs:\\n{diff_string}\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2141\u001b[0m )\n", | |
"\u001b[0;31mAssertionError\u001b[0m: ProvenanceTable row 0 differs:\nself.timestamp=2021-05-14T23:54:41.180064 other.timestamp=2021-05-14T23:54:41.866439" | |
] | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 23;\n", | |
" var nbb_unformatted_code = \"a.tables.assert_equals(b.tables)\";\n", | |
" var nbb_formatted_code = \"a.tables.assert_equals(b.tables)\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"a.tables.assert_equals(b.tables)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 24, | |
"id": "38995586", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 24;\n", | |
" var nbb_unformatted_code = \"a.tables.assert_equals(b.tables, ignore_timestamps=True)\";\n", | |
" var nbb_formatted_code = \"a.tables.assert_equals(b.tables, ignore_timestamps=True)\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"a.tables.assert_equals(b.tables, ignore_timestamps=True)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "5da1ddcd", | |
"metadata": {}, | |
"source": [ | |
"## Table fancy indexing\n", | |
"Numpy style!" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 25, | |
"id": "7ec05087", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 25;\n", | |
" var nbb_unformatted_code = \"tskit.set_print_options(max_lines=100)\\nnodes = msprime.sim_ancestry(3).tables.nodes\";\n", | |
" var nbb_formatted_code = \"tskit.set_print_options(max_lines=100)\\nnodes = msprime.sim_ancestry(3).tables.nodes\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"tskit.set_print_options(max_lines=100)\n", | |
"nodes = msprime.sim_ancestry(3).tables.nodes" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 26, | |
"id": "df6459dc", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div>\n", | |
" <style scoped=\"\">\n", | |
" .tskit-table tbody tr th:only-of-type {vertical-align: middle;}\n", | |
" .tskit-table tbody tr th {vertical-align: top;}\n", | |
" .tskit-table tbody td {text-align: right;padding: 0.5em 0.5em;}\n", | |
" .tskit-table tbody th {padding: 0.5em 0.5em;}\n", | |
" </style>\n", | |
" <table border=\"1\" class=\"tskit-table\">\n", | |
" <thead>\n", | |
" <tr>\n", | |
" <th>id</th><th>flags</th><th>population</th><th>individual</th><th>time</th><th>metadata</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><td>0</td><td>1</td><td>0</td><td>0</td><td>0.00000000</td><td>b''</td></tr>\n", | |
"<tr><td>1</td><td>1</td><td>0</td><td>0</td><td>0.00000000</td><td>b''</td></tr>\n", | |
"<tr><td>2</td><td>1</td><td>0</td><td>1</td><td>0.00000000</td><td>b''</td></tr>\n", | |
"<tr><td>3</td><td>1</td><td>0</td><td>1</td><td>0.00000000</td><td>b''</td></tr>\n", | |
"<tr><td>4</td><td>1</td><td>0</td><td>2</td><td>0.00000000</td><td>b''</td></tr>\n", | |
"<tr><td>5</td><td>1</td><td>0</td><td>2</td><td>0.00000000</td><td>b''</td></tr>\n", | |
"<tr><td>6</td><td>0</td><td>0</td><td>-1</td><td>0.15055543</td><td>b''</td></tr>\n", | |
"<tr><td>7</td><td>0</td><td>0</td><td>-1</td><td>0.15136653</td><td>b''</td></tr>\n", | |
"<tr><td>8</td><td>0</td><td>0</td><td>-1</td><td>0.77734698</td><td>b''</td></tr>\n", | |
"<tr><td>9</td><td>0</td><td>0</td><td>-1</td><td>1.50285682</td><td>b''</td></tr>\n", | |
"<tr><td>10</td><td>0</td><td>0</td><td>-1</td><td>5.64288316</td><td>b''</td></tr>\n", | |
"\n", | |
" </tbody>\n", | |
" </table>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
"<tskit.tables.NodeTable at 0x7fcd588f2f10>" | |
] | |
}, | |
"execution_count": 26, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 26;\n", | |
" var nbb_unformatted_code = \"nodes\";\n", | |
" var nbb_formatted_code = \"nodes\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"nodes" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 27, | |
"id": "db454612", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"NodeTableRow(flags=1, time=0.0, population=0, individual=0, metadata=b'')" | |
] | |
}, | |
"execution_count": 27, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 27;\n", | |
" var nbb_unformatted_code = \"nodes[1]\";\n", | |
" var nbb_formatted_code = \"nodes[1]\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"nodes[1]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 28, | |
"id": "83cb2fef", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div>\n", | |
" <style scoped=\"\">\n", | |
" .tskit-table tbody tr th:only-of-type {vertical-align: middle;}\n", | |
" .tskit-table tbody tr th {vertical-align: top;}\n", | |
" .tskit-table tbody td {text-align: right;padding: 0.5em 0.5em;}\n", | |
" .tskit-table tbody th {padding: 0.5em 0.5em;}\n", | |
" </style>\n", | |
" <table border=\"1\" class=\"tskit-table\">\n", | |
" <thead>\n", | |
" <tr>\n", | |
" <th>id</th><th>flags</th><th>population</th><th>individual</th><th>time</th><th>metadata</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><td>0</td><td>1</td><td>0</td><td>1</td><td>0.00000000</td><td>b''</td></tr>\n", | |
"<tr><td>1</td><td>1</td><td>0</td><td>2</td><td>0.00000000</td><td>b''</td></tr>\n", | |
"<tr><td>2</td><td>0</td><td>0</td><td>-1</td><td>0.15136653</td><td>b''</td></tr>\n", | |
"\n", | |
" </tbody>\n", | |
" </table>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
"<tskit.tables.NodeTable at 0x7fcd588a82b0>" | |
] | |
}, | |
"execution_count": 28, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 28;\n", | |
" var nbb_unformatted_code = \"nodes[3:9:2]\";\n", | |
" var nbb_formatted_code = \"nodes[3:9:2]\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"nodes[3:9:2]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 29, | |
"id": "15e4add2", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div>\n", | |
" <style scoped=\"\">\n", | |
" .tskit-table tbody tr th:only-of-type {vertical-align: middle;}\n", | |
" .tskit-table tbody tr th {vertical-align: top;}\n", | |
" .tskit-table tbody td {text-align: right;padding: 0.5em 0.5em;}\n", | |
" .tskit-table tbody th {padding: 0.5em 0.5em;}\n", | |
" </style>\n", | |
" <table border=\"1\" class=\"tskit-table\">\n", | |
" <thead>\n", | |
" <tr>\n", | |
" <th>id</th><th>flags</th><th>population</th><th>individual</th><th>time</th><th>metadata</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><td>0</td><td>0</td><td>0</td><td>-1</td><td>5.64288316</td><td>b''</td></tr>\n", | |
"<tr><td>1</td><td>0</td><td>0</td><td>-1</td><td>1.50285682</td><td>b''</td></tr>\n", | |
"<tr><td>2</td><td>0</td><td>0</td><td>-1</td><td>0.77734698</td><td>b''</td></tr>\n", | |
"<tr><td>3</td><td>0</td><td>0</td><td>-1</td><td>0.15136653</td><td>b''</td></tr>\n", | |
"<tr><td>4</td><td>0</td><td>0</td><td>-1</td><td>0.15055543</td><td>b''</td></tr>\n", | |
"<tr><td>5</td><td>1</td><td>0</td><td>2</td><td>0.00000000</td><td>b''</td></tr>\n", | |
"<tr><td>6</td><td>1</td><td>0</td><td>2</td><td>0.00000000</td><td>b''</td></tr>\n", | |
"<tr><td>7</td><td>1</td><td>0</td><td>1</td><td>0.00000000</td><td>b''</td></tr>\n", | |
"<tr><td>8</td><td>1</td><td>0</td><td>1</td><td>0.00000000</td><td>b''</td></tr>\n", | |
"<tr><td>9</td><td>1</td><td>0</td><td>0</td><td>0.00000000</td><td>b''</td></tr>\n", | |
"<tr><td>10</td><td>1</td><td>0</td><td>0</td><td>0.00000000</td><td>b''</td></tr>\n", | |
"\n", | |
" </tbody>\n", | |
" </table>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
"<tskit.tables.NodeTable at 0x7fcd588f2880>" | |
] | |
}, | |
"execution_count": 29, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 29;\n", | |
" var nbb_unformatted_code = \"nodes[::-1]\";\n", | |
" var nbb_formatted_code = \"nodes[::-1]\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"nodes[::-1]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 30, | |
"id": "4d922cb0", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div>\n", | |
" <style scoped=\"\">\n", | |
" .tskit-table tbody tr th:only-of-type {vertical-align: middle;}\n", | |
" .tskit-table tbody tr th {vertical-align: top;}\n", | |
" .tskit-table tbody td {text-align: right;padding: 0.5em 0.5em;}\n", | |
" .tskit-table tbody th {padding: 0.5em 0.5em;}\n", | |
" </style>\n", | |
" <table border=\"1\" class=\"tskit-table\">\n", | |
" <thead>\n", | |
" <tr>\n", | |
" <th>id</th><th>flags</th><th>population</th><th>individual</th><th>time</th><th>metadata</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><td>0</td><td>1</td><td>0</td><td>1</td><td>0.00000000</td><td>b''</td></tr>\n", | |
"<tr><td>1</td><td>1</td><td>0</td><td>2</td><td>0.00000000</td><td>b''</td></tr>\n", | |
"<tr><td>2</td><td>0</td><td>0</td><td>-1</td><td>1.50285682</td><td>b''</td></tr>\n", | |
"\n", | |
" </tbody>\n", | |
" </table>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
"<tskit.tables.NodeTable at 0x7fcd58088eb0>" | |
] | |
}, | |
"execution_count": 30, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 30;\n", | |
" var nbb_unformatted_code = \"nodes[[3, 4, 9]]\";\n", | |
" var nbb_formatted_code = \"nodes[[3, 4, 9]]\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"nodes[[3, 4, 9]]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 31, | |
"id": "22ac30fd", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([False, False, False, True, False, False, False, True, False,\n", | |
" True, False])" | |
] | |
}, | |
"execution_count": 31, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 31;\n", | |
" var nbb_unformatted_code = \"mask = np.array([False] * len(nodes))\\nmask[np.random.choice(np.arange(len(nodes)), size=5)] = True\\nmask\";\n", | |
" var nbb_formatted_code = \"mask = np.array([False] * len(nodes))\\nmask[np.random.choice(np.arange(len(nodes)), size=5)] = True\\nmask\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"mask = np.array([False] * len(nodes))\n", | |
"mask[np.random.choice(np.arange(len(nodes)), size=5)] = True\n", | |
"mask" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 32, | |
"id": "ebe05a46", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div>\n", | |
" <style scoped=\"\">\n", | |
" .tskit-table tbody tr th:only-of-type {vertical-align: middle;}\n", | |
" .tskit-table tbody tr th {vertical-align: top;}\n", | |
" .tskit-table tbody td {text-align: right;padding: 0.5em 0.5em;}\n", | |
" .tskit-table tbody th {padding: 0.5em 0.5em;}\n", | |
" </style>\n", | |
" <table border=\"1\" class=\"tskit-table\">\n", | |
" <thead>\n", | |
" <tr>\n", | |
" <th>id</th><th>flags</th><th>population</th><th>individual</th><th>time</th><th>metadata</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><td>0</td><td>1</td><td>0</td><td>1</td><td>0.00000000</td><td>b''</td></tr>\n", | |
"<tr><td>1</td><td>0</td><td>0</td><td>-1</td><td>0.15136653</td><td>b''</td></tr>\n", | |
"<tr><td>2</td><td>0</td><td>0</td><td>-1</td><td>1.50285682</td><td>b''</td></tr>\n", | |
"\n", | |
" </tbody>\n", | |
" </table>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
"<tskit.tables.NodeTable at 0x7fcd588b1370>" | |
] | |
}, | |
"execution_count": 32, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 32;\n", | |
" var nbb_unformatted_code = \"nodes[mask]\";\n", | |
" var nbb_formatted_code = \"nodes[mask]\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"nodes[mask]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "cf98549e", | |
"metadata": {}, | |
"source": [ | |
"## Select a range for an SVG with `x_lim` (by @hyanwong)\n", | |
"Pick out a region from a tree sequence" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 33, | |
"id": "410b4c2d", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/svg+xml": [ | |
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"300\" version=\"1.1\" width=\"800\"><defs><style type=\"text/css\"><![CDATA[.background path {fill: #808080; fill-opacity:0}.background path:nth-child(odd) {fill-opacity:.1}.axes {font-size: 14px}.x-axis .tick .lab {font-weight: bold}.axes, .tree {font-size: 14px; text-anchor:middle}.y-axis line.grid {stroke: #FAFAFA}.y-axis > .lab text {transform: translateX(0.8em) rotate(-90deg)}.x-axis .tick g {transform: translateY(0.9em)}.x-axis > .lab text {transform: translateY(-0.8em)}.axes line, .edge {stroke:black; fill:none}.node > .sym {fill: black; stroke: none}.site > .sym {stroke: black}.mut text {fill: red; font-style: italic}.mut.extra text {fill: hotpink}.mut line {fill: none; stroke: none}.mut .sym {fill: none; stroke: red}.mut.extra .sym {stroke: hotpink}.node .mut .sym {stroke-width: 1.5px}.tree text, .tree-sequence text {dominant-baseline: central}.plotbox .lab.lft {text-anchor: end}.plotbox .lab.rgt {text-anchor: start}]]></style></defs><g class=\"tree-sequence\"><g class=\"background\"><path d=\"M20,0 l760,0 l0,238.2 l0,25 l0,5 l-760,0 l0,-5 l0,-25 l0,-238.2z\"/></g><g class=\"axes\"><g class=\"x-axis\"><g class=\"lab\" transform=\"translate(400,300)\"><text text-anchor=\"middle\">Genome position</text></g><line x1=\"20\" x2=\"780\" y1=\"263.2\" y2=\"263.2\"/><g class=\"tick\" transform=\"translate(20 263.2)\"><line x1=\"0\" x2=\"0\" y1=\"0\" y2=\"5\"/><g class=\"lab\" transform=\"translate(0,5)\"><text>0</text></g></g><g class=\"tick\" transform=\"translate(780 263.2)\"><line x1=\"0\" x2=\"0\" y1=\"0\" y2=\"5\"/><g class=\"lab\" transform=\"translate(0,5)\"><text>100</text></g></g></g></g><g class=\"plotbox trees\"><g class=\"tree t0\" transform=\"translate(20 0)\"><g class=\"plotbox\"><g class=\"node n38 p0 root\" transform=\"translate(420.219 26.8)\"><g class=\"a38 node n33 p0\" transform=\"translate(200.531 138.203)\"><g class=\"a33 node n27 p0\" transform=\"translate(69.75 36.6179)\"><g class=\"a27 i7 leaf node n14 p0 sample\" transform=\"translate(31.5 19.7793)\"><path class=\"edge\" d=\"M 0 0 V -19.7793 H -31.5\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">14</text></g><g class=\"a27 node n25 p0\" transform=\"translate(-31.5 10.9323)\"><g class=\"a25 i9 leaf node n19 p0 sample\" transform=\"translate(27 8.84697)\"><path class=\"edge\" d=\"M 0 0 V -8.84697 H -27\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">19</text></g><g class=\"a25 node n23 p0\" transform=\"translate(-27 0.222693)\"><g class=\"a23 i4 leaf node n8 p0 sample\" transform=\"translate(-18 8.62428)\"><path class=\"edge\" d=\"M 0 0 V -8.62428 H 18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">8</text></g><g class=\"a23 i4 leaf node n9 p0 sample\" transform=\"translate(18 8.62428)\"><path class=\"edge\" d=\"M 0 0 V -8.62428 H -18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">9</text></g><path class=\"edge\" d=\"M 0 0 V -0.222693 H 27\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">23</text></g><path class=\"edge\" d=\"M 0 0 V -10.9323 H 31.5\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">25</text></g><path class=\"edge\" d=\"M 0 0 V -36.6179 H -69.75\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab rgt\" transform=\"translate(3 -7.0)\">27</text></g><g class=\"a33 node n32 p0\" transform=\"translate(-69.75 9.60346)\"><g class=\"a32 i3 leaf node n7 p0 sample\" transform=\"translate(27 46.7937)\"><path class=\"edge\" d=\"M 0 0 V -46.7937 H -27\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">7</text></g><g class=\"a32 node n24 p0\" transform=\"translate(-27 38.0149)\"><g class=\"a24 i1 leaf node n2 p0 sample\" transform=\"translate(-18 8.77884)\"><path class=\"edge\" d=\"M 0 0 V -8.77884 H 18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">2</text></g><g class=\"a24 i1 leaf node n3 p0 sample\" transform=\"translate(18 8.77884)\"><path class=\"edge\" d=\"M 0 0 V -8.77884 H -18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">3</text></g><path class=\"edge\" d=\"M 0 0 V -38.0149 H 27\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">24</text></g><path class=\"edge\" d=\"M 0 0 V -9.60346 H 69.75\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">32</text></g><path class=\"edge\" d=\"M 0 0 V -138.203 H -200.531\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab rgt\" transform=\"translate(3 -7.0)\">33</text></g><g class=\"a38 node n37 p0\" transform=\"translate(-200.531 17.5784)\"><g class=\"a37 node n34 p0\" transform=\"translate(-163.688 119.616)\"><g class=\"a34 i0 leaf node n0 p0 sample\" transform=\"translate(-18 57.4055)\"><path class=\"edge\" d=\"M 0 0 V -57.4055 H 18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">0</text></g><g class=\"a34 i5 leaf node n10 p0 sample\" transform=\"translate(18 57.4055)\"><path class=\"edge\" d=\"M 0 0 V -57.4055 H -18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">10</text></g><path class=\"edge\" d=\"M 0 0 V -119.616 H 163.688\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">34</text></g><g class=\"a37 node n36 p0\" transform=\"translate(163.688 73.3196)\"><g class=\"a36 i6 leaf node n13 p0 sample\" transform=\"translate(86.625 103.702)\"><path class=\"edge\" d=\"M 0 0 V -103.702 H -86.625\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">13</text></g><g class=\"a36 node n35 p0\" transform=\"translate(-86.625 7.55694)\"><g class=\"a35 node n29 p0\" transform=\"translate(96.75 63.9709)\"><g class=\"a29 i7 leaf node n15 p0 sample\" transform=\"translate(40.5 32.1742)\"><path class=\"edge\" d=\"M 0 0 V -32.1742 H -40.5\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">15</text></g><g class=\"a29 node n26 p0\" transform=\"translate(-40.5 16.1411)\"><g class=\"a26 i2 leaf node n5 p0 sample\" transform=\"translate(-27 16.033)\"><path class=\"edge\" d=\"M 0 0 V -16.033 H 27\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">5</text></g><g class=\"a26 node n21 p0\" transform=\"translate(27 10.3108)\"><g class=\"a21 i5 leaf node n11 p0 sample\" transform=\"translate(-18 5.72225)\"><path class=\"edge\" d=\"M 0 0 V -5.72225 H 18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">11</text></g><g class=\"a21 i6 leaf node n12 p0 sample\" transform=\"translate(18 5.72225)\"><path class=\"edge\" d=\"M 0 0 V -5.72225 H -18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">12</text></g><path class=\"edge\" d=\"M 0 0 V -10.3108 H -27\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab rgt\" transform=\"translate(3 -7.0)\">21</text></g><path class=\"edge\" d=\"M 0 0 V -16.1411 H 40.5\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">26</text></g><path class=\"edge\" d=\"M 0 0 V -63.9709 H -96.75\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab rgt\" transform=\"translate(3 -7.0)\">29</text></g><g class=\"a35 node n31 p0\" transform=\"translate(-96.75 60.1519)\"><g class=\"a31 node n28 p0\" transform=\"translate(63 9.21384)\"><g class=\"a28 i8 leaf node n17 p0 sample\" transform=\"translate(27 26.7793)\"><path class=\"edge\" d=\"M 0 0 V -26.7793 H -27\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">17</text></g><g class=\"a28 node n20 p0\" transform=\"translate(-27 26.0742)\"><g class=\"a20 i8 leaf node n16 p0 sample\" transform=\"translate(-18 0.705138)\"><path class=\"edge\" d=\"M 0 0 V -0.705138 H 18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">16</text></g><g class=\"a20 i9 leaf node n18 p0 sample\" transform=\"translate(18 0.705138)\"><path class=\"edge\" d=\"M 0 0 V -0.705138 H -18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">18</text></g><path class=\"edge\" d=\"M 0 0 V -26.0742 H 27\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">20</text></g><path class=\"edge\" d=\"M 0 0 V -9.21384 H -63\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab rgt\" transform=\"translate(3 -7.0)\">28</text></g><g class=\"a31 node n30 p0\" transform=\"translate(-63 3.03703)\"><g class=\"a30 i0 leaf node n1 p0 sample\" transform=\"translate(-27 32.9561)\"><path class=\"edge\" d=\"M 0 0 V -32.9561 H 27\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">1</text></g><g class=\"a30 node n22 p0\" transform=\"translate(27 26.0576)\"><g class=\"a22 i2 leaf node n4 p0 sample\" transform=\"translate(-18 6.89856)\"><path class=\"edge\" d=\"M 0 0 V -6.89856 H 18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">4</text></g><g class=\"a22 i3 leaf node n6 p0 sample\" transform=\"translate(18 6.89856)\"><path class=\"edge\" d=\"M 0 0 V -6.89856 H -18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">6</text></g><path class=\"edge\" d=\"M 0 0 V -26.0576 H -27\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab rgt\" transform=\"translate(3 -7.0)\">22</text></g><path class=\"edge\" d=\"M 0 0 V -3.03703 H 63\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">30</text></g><path class=\"edge\" d=\"M 0 0 V -60.1519 H 96.75\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">31</text></g><path class=\"edge\" d=\"M 0 0 V -7.55694 H 86.625\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">35</text></g><path class=\"edge\" d=\"M 0 0 V -73.3196 H -163.688\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab rgt\" transform=\"translate(3 -7.0)\">36</text></g><path class=\"edge\" d=\"M 0 0 V -17.5784 H 200.531\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">37</text></g><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab\" transform=\"translate(0 -11)\">38</text></g></g></g></g></g></svg>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.SVG object>" | |
] | |
}, | |
"execution_count": 33, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 33;\n", | |
" var nbb_unformatted_code = \"ts = msprime.sim_ancestry(10, recombination_rate=0.001, sequence_length=100)\\nSVG(ts.draw_svg(size=(800, 300)))\";\n", | |
" var nbb_formatted_code = \"ts = msprime.sim_ancestry(10, recombination_rate=0.001, sequence_length=100)\\nSVG(ts.draw_svg(size=(800, 300)))\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"ts = msprime.sim_ancestry(10, recombination_rate=0.001, sequence_length=100)\n", | |
"SVG(ts.draw_svg(size=(800, 300)))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 34, | |
"id": "e130b8f3", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/svg+xml": [ | |
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:ev=\"http://www.w3.org/2001/xml-events\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" baseProfile=\"full\" height=\"300\" version=\"1.1\" width=\"800\"><defs><style type=\"text/css\"><![CDATA[.background path {fill: #808080; fill-opacity:0}.background path:nth-child(odd) {fill-opacity:.1}.axes {font-size: 14px}.x-axis .tick .lab {font-weight: bold}.axes, .tree {font-size: 14px; text-anchor:middle}.y-axis line.grid {stroke: #FAFAFA}.y-axis > .lab text {transform: translateX(0.8em) rotate(-90deg)}.x-axis .tick g {transform: translateY(0.9em)}.x-axis > .lab text {transform: translateY(-0.8em)}.axes line, .edge {stroke:black; fill:none}.node > .sym {fill: black; stroke: none}.site > .sym {stroke: black}.mut text {fill: red; font-style: italic}.mut.extra text {fill: hotpink}.mut line {fill: none; stroke: none}.mut .sym {fill: none; stroke: red}.mut.extra .sym {stroke: hotpink}.node .mut .sym {stroke-width: 1.5px}.tree text, .tree-sequence text {dominant-baseline: central}.plotbox .lab.lft {text-anchor: end}.plotbox .lab.rgt {text-anchor: start}]]></style></defs><g class=\"tree-sequence\"><g class=\"background\"><path d=\"M20,0 l760,0 l0,238.2 l0,25 l0,5 l-760,0 l0,-5 l0,-25 l0,-238.2z\"/></g><g class=\"axes\"><g class=\"x-axis\"><g class=\"lab\" transform=\"translate(400,300)\"><text text-anchor=\"middle\">Genome position</text></g><line x1=\"20\" x2=\"780\" y1=\"263.2\" y2=\"263.2\"/></g></g><g class=\"plotbox trees\"><g class=\"tree t1\" transform=\"translate(20 0)\"><g class=\"plotbox\"><g class=\"node n38 p0 root\" transform=\"translate(420.219 26.8)\"><g class=\"a38 node n33 p0\" transform=\"translate(200.531 138.203)\"><g class=\"a33 node n27 p0\" transform=\"translate(69.75 36.6179)\"><g class=\"a27 i7 leaf node n14 p0 sample\" transform=\"translate(31.5 19.7793)\"><path class=\"edge\" d=\"M 0 0 V -19.7793 H -31.5\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">14</text></g><g class=\"a27 node n25 p0\" transform=\"translate(-31.5 10.9323)\"><g class=\"a25 i9 leaf node n19 p0 sample\" transform=\"translate(27 8.84697)\"><path class=\"edge\" d=\"M 0 0 V -8.84697 H -27\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">19</text></g><g class=\"a25 node n23 p0\" transform=\"translate(-27 0.222693)\"><g class=\"a23 i4 leaf node n8 p0 sample\" transform=\"translate(-18 8.62428)\"><path class=\"edge\" d=\"M 0 0 V -8.62428 H 18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">8</text></g><g class=\"a23 i4 leaf node n9 p0 sample\" transform=\"translate(18 8.62428)\"><path class=\"edge\" d=\"M 0 0 V -8.62428 H -18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">9</text></g><path class=\"edge\" d=\"M 0 0 V -0.222693 H 27\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">23</text></g><path class=\"edge\" d=\"M 0 0 V -10.9323 H 31.5\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">25</text></g><path class=\"edge\" d=\"M 0 0 V -36.6179 H -69.75\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab rgt\" transform=\"translate(3 -7.0)\">27</text></g><g class=\"a33 node n32 p0\" transform=\"translate(-69.75 9.60346)\"><g class=\"a32 i3 leaf node n7 p0 sample\" transform=\"translate(27 46.7937)\"><path class=\"edge\" d=\"M 0 0 V -46.7937 H -27\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">7</text></g><g class=\"a32 node n24 p0\" transform=\"translate(-27 38.0149)\"><g class=\"a24 i1 leaf node n2 p0 sample\" transform=\"translate(-18 8.77884)\"><path class=\"edge\" d=\"M 0 0 V -8.77884 H 18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">2</text></g><g class=\"a24 i1 leaf node n3 p0 sample\" transform=\"translate(18 8.77884)\"><path class=\"edge\" d=\"M 0 0 V -8.77884 H -18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">3</text></g><path class=\"edge\" d=\"M 0 0 V -38.0149 H 27\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">24</text></g><path class=\"edge\" d=\"M 0 0 V -9.60346 H 69.75\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">32</text></g><path class=\"edge\" d=\"M 0 0 V -138.203 H -200.531\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab rgt\" transform=\"translate(3 -7.0)\">33</text></g><g class=\"a38 node n37 p0\" transform=\"translate(-200.531 17.5784)\"><g class=\"a37 node n34 p0\" transform=\"translate(-163.688 119.616)\"><g class=\"a34 i0 leaf node n0 p0 sample\" transform=\"translate(-18 57.4055)\"><path class=\"edge\" d=\"M 0 0 V -57.4055 H 18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">0</text></g><g class=\"a34 i5 leaf node n10 p0 sample\" transform=\"translate(18 57.4055)\"><path class=\"edge\" d=\"M 0 0 V -57.4055 H -18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">10</text></g><path class=\"edge\" d=\"M 0 0 V -119.616 H 163.688\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">34</text></g><g class=\"a37 node n36 p0\" transform=\"translate(163.688 73.3196)\"><g class=\"a36 i6 leaf node n13 p0 sample\" transform=\"translate(86.625 103.702)\"><path class=\"edge\" d=\"M 0 0 V -103.702 H -86.625\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">13</text></g><g class=\"a36 node n35 p0\" transform=\"translate(-86.625 7.55694)\"><g class=\"a35 node n29 p0\" transform=\"translate(96.75 63.9709)\"><g class=\"a29 i7 leaf node n15 p0 sample\" transform=\"translate(40.5 32.1742)\"><path class=\"edge\" d=\"M 0 0 V -32.1742 H -40.5\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">15</text></g><g class=\"a29 node n26 p0\" transform=\"translate(-40.5 16.1411)\"><g class=\"a26 i2 leaf node n5 p0 sample\" transform=\"translate(-27 16.033)\"><path class=\"edge\" d=\"M 0 0 V -16.033 H 27\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">5</text></g><g class=\"a26 node n21 p0\" transform=\"translate(27 10.3108)\"><g class=\"a21 i5 leaf node n11 p0 sample\" transform=\"translate(-18 5.72225)\"><path class=\"edge\" d=\"M 0 0 V -5.72225 H 18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">11</text></g><g class=\"a21 i6 leaf node n12 p0 sample\" transform=\"translate(18 5.72225)\"><path class=\"edge\" d=\"M 0 0 V -5.72225 H -18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">12</text></g><path class=\"edge\" d=\"M 0 0 V -10.3108 H -27\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab rgt\" transform=\"translate(3 -7.0)\">21</text></g><path class=\"edge\" d=\"M 0 0 V -16.1411 H 40.5\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">26</text></g><path class=\"edge\" d=\"M 0 0 V -63.9709 H -96.75\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab rgt\" transform=\"translate(3 -7.0)\">29</text></g><g class=\"a35 node n31 p0\" transform=\"translate(-96.75 60.1519)\"><g class=\"a31 node n28 p0\" transform=\"translate(63 9.21384)\"><g class=\"a28 i8 leaf node n17 p0 sample\" transform=\"translate(27 26.7793)\"><path class=\"edge\" d=\"M 0 0 V -26.7793 H -27\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">17</text></g><g class=\"a28 node n20 p0\" transform=\"translate(-27 26.0742)\"><g class=\"a20 i8 leaf node n16 p0 sample\" transform=\"translate(-18 0.705138)\"><path class=\"edge\" d=\"M 0 0 V -0.705138 H 18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">16</text></g><g class=\"a20 i9 leaf node n18 p0 sample\" transform=\"translate(18 0.705138)\"><path class=\"edge\" d=\"M 0 0 V -0.705138 H -18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">18</text></g><path class=\"edge\" d=\"M 0 0 V -26.0742 H 27\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">20</text></g><path class=\"edge\" d=\"M 0 0 V -9.21384 H -63\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab rgt\" transform=\"translate(3 -7.0)\">28</text></g><g class=\"a31 node n30 p0\" transform=\"translate(-63 3.03703)\"><g class=\"a30 i0 leaf node n1 p0 sample\" transform=\"translate(-27 32.9561)\"><path class=\"edge\" d=\"M 0 0 V -32.9561 H 27\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">1</text></g><g class=\"a30 node n22 p0\" transform=\"translate(27 26.0576)\"><g class=\"a22 i2 leaf node n4 p0 sample\" transform=\"translate(-18 6.89856)\"><path class=\"edge\" d=\"M 0 0 V -6.89856 H 18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">4</text></g><g class=\"a22 i3 leaf node n6 p0 sample\" transform=\"translate(18 6.89856)\"><path class=\"edge\" d=\"M 0 0 V -6.89856 H -18\"/><rect class=\"sym\" height=\"6\" width=\"6\" x=\"-3\" y=\"-3\"/><text class=\"lab\" transform=\"translate(0 11)\">6</text></g><path class=\"edge\" d=\"M 0 0 V -26.0576 H -27\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab rgt\" transform=\"translate(3 -7.0)\">22</text></g><path class=\"edge\" d=\"M 0 0 V -3.03703 H 63\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">30</text></g><path class=\"edge\" d=\"M 0 0 V -60.1519 H 96.75\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">31</text></g><path class=\"edge\" d=\"M 0 0 V -7.55694 H 86.625\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">35</text></g><path class=\"edge\" d=\"M 0 0 V -73.3196 H -163.688\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab rgt\" transform=\"translate(3 -7.0)\">36</text></g><path class=\"edge\" d=\"M 0 0 V -17.5784 H 200.531\"/><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab lft\" transform=\"translate(-3 -7.0)\">37</text></g><circle class=\"sym\" cx=\"0\" cy=\"0\" r=\"3\"/><text class=\"lab\" transform=\"translate(0 -11)\">38</text></g></g></g></g></g></svg>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.SVG object>" | |
] | |
}, | |
"execution_count": 34, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 34;\n", | |
" var nbb_unformatted_code = \"SVG(ts.draw_svg(size=(800, 300), x_lim=(88, 89)))\";\n", | |
" var nbb_formatted_code = \"SVG(ts.draw_svg(size=(800, 300), x_lim=(88, 89)))\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"SVG(ts.draw_svg(size=(800, 300), x_lim=(88, 89)))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "3c921473", | |
"metadata": {}, | |
"source": [ | |
"## Direct, no-copy access to `Tree` structure arrays (by @jeromekelleher)\n", | |
"\n", | |
"Enables numba-powered algorithms over Trees." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 35, | |
"id": "273c4e2f", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"[27 22 25 29 29 20 24 23 28 21 23 26 33 37 32 22 25 26 21 20 31 27 24 31\n", | |
" 35 28 33 30 32 30 34 34 38 36 35 36 37 38 -1]\n", | |
"[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 5 9 1 7\n", | |
" 6 2 11 0 8 3 27 20 14 12 30 24 33 13 32]\n", | |
"[-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 19 18 15 10\n", | |
" 22 16 17 21 25 4 29 23 28 26 31 34 35 36 37]\n", | |
"[-1 -1 -1 -1 3 -1 -1 -1 -1 -1 7 -1 -1 -1 -1 1 2 11 9 5 -1 0 6 20\n", | |
" -1 8 12 -1 14 27 -1 30 -1 -1 24 33 13 32 -1]\n", | |
"[21 15 16 4 -1 19 22 10 25 18 -1 17 26 36 28 -1 -1 -1 -1 -1 23 -1 -1 -1\n", | |
" 34 -1 -1 29 -1 -1 31 -1 37 35 -1 -1 -1 -1 -1]\n" | |
] | |
}, | |
{ | |
"data": { | |
"application/javascript": [ | |
"\n", | |
" setTimeout(function() {\n", | |
" var nbb_cell_id = 35;\n", | |
" var nbb_unformatted_code = \"tree = msprime.sim_ancestry(10).first()\\nprint(tree.parent_array)\\nprint(tree.left_child_array)\\nprint(tree.right_child_array)\\nprint(tree.left_sib_array)\\nprint(tree.right_sib_array)\";\n", | |
" var nbb_formatted_code = \"tree = msprime.sim_ancestry(10).first()\\nprint(tree.parent_array)\\nprint(tree.left_child_array)\\nprint(tree.right_child_array)\\nprint(tree.left_sib_array)\\nprint(tree.right_sib_array)\";\n", | |
" var nbb_cells = Jupyter.notebook.get_cells();\n", | |
" for (var i = 0; i < nbb_cells.length; ++i) {\n", | |
" if (nbb_cells[i].input_prompt_number == nbb_cell_id) {\n", | |
" if (nbb_cells[i].get_text() == nbb_unformatted_code) {\n", | |
" nbb_cells[i].set_text(nbb_formatted_code);\n", | |
" }\n", | |
" break;\n", | |
" }\n", | |
" }\n", | |
" }, 500);\n", | |
" " | |
], | |
"text/plain": [ | |
"<IPython.core.display.Javascript object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"tree = msprime.sim_ancestry(10).first()\n", | |
"print(tree.parent_array)\n", | |
"print(tree.left_child_array)\n", | |
"print(tree.right_child_array)\n", | |
"print(tree.left_sib_array)\n", | |
"print(tree.right_sib_array)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "2d7647ad", | |
"metadata": {}, | |
"source": [ | |
"## Other changes" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "efe57a3f", | |
"metadata": {}, | |
"source": [ | |
" - Metadata is now lazily decoded on table rows for better perf\n", | |
" - C API `table_extend` method (underlies the fancy indexing above)\n", | |
" - Bugfixes and tweaks!\n", | |
" " | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"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.8.5" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 5 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment