Skip to content

Instantly share code, notes, and snippets.

@ivirshup
Last active February 1, 2024 14:21
Show Gist options
  • Save ivirshup/80db1342b78f64d8aa2d55d92eae1541 to your computer and use it in GitHub Desktop.
Save ivirshup/80db1342b78f64d8aa2d55d92eae1541 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np, pandas as pd\n",
"from scipy import sparse\n",
"import session_info"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<details>\n",
"<summary>Click to view session information</summary>\n",
"<pre>\n",
"-----\n",
"numpy 1.26.3\n",
"pandas 2.2.0\n",
"scipy 1.12.0\n",
"session_info 1.0.0\n",
"-----\n",
"</pre>\n",
"<details>\n",
"<summary>Click to view modules imported as dependencies</summary>\n",
"<pre>\n",
"anyio NA\n",
"appnope 0.1.3\n",
"arrow 1.3.0\n",
"asttokens NA\n",
"attr 23.1.0\n",
"attrs 23.1.0\n",
"babel 2.13.0\n",
"backcall 0.2.0\n",
"certifi 2023.11.17\n",
"charset_normalizer 3.3.0\n",
"cloudpickle 3.0.0\n",
"comm 0.1.4\n",
"cython_runtime NA\n",
"dateutil 2.8.2\n",
"debugpy 1.8.0\n",
"decorator 5.1.1\n",
"executing 2.0.0\n",
"fastjsonschema NA\n",
"fqdn NA\n",
"google NA\n",
"idna 3.4\n",
"ipykernel 6.25.2\n",
"isoduration NA\n",
"jedi 0.19.1\n",
"jinja2 3.1.2\n",
"json5 NA\n",
"jsonpointer 2.4\n",
"jsonschema 4.19.1\n",
"jsonschema_specifications NA\n",
"jupyter_events 0.7.0\n",
"jupyter_server 2.7.3\n",
"jupyterlab_server 2.25.0\n",
"markupsafe 2.1.3\n",
"nbformat 5.9.2\n",
"overrides NA\n",
"packaging 23.2\n",
"parso 0.8.3\n",
"pexpect 4.8.0\n",
"pickleshare 0.7.5\n",
"platformdirs 3.11.0\n",
"prometheus_client NA\n",
"prompt_toolkit 3.0.39\n",
"psutil 5.9.5\n",
"ptyprocess 0.7.0\n",
"pure_eval 0.2.2\n",
"pyarrow 13.0.0\n",
"pydev_ipython NA\n",
"pydevconsole NA\n",
"pydevd 2.9.5\n",
"pydevd_file_utils NA\n",
"pydevd_plugins NA\n",
"pydevd_tracing NA\n",
"pygments 2.16.1\n",
"pythonjsonlogger NA\n",
"pytz 2023.3.post1\n",
"referencing NA\n",
"requests 2.31.0\n",
"rfc3339_validator 0.1.4\n",
"rfc3986_validator 0.1.1\n",
"rpds NA\n",
"send2trash NA\n",
"sitecustomize NA\n",
"six 1.16.0\n",
"sniffio 1.3.0\n",
"stack_data 0.6.3\n",
"tornado 6.3.3\n",
"traitlets 5.11.2\n",
"uri_template NA\n",
"urllib3 2.0.6\n",
"wcwidth 0.2.8\n",
"webcolors 1.13\n",
"websocket 1.6.4\n",
"yaml 6.0.1\n",
"zmq 25.1.1\n",
"</pre>\n",
"</details> <!-- seems like this ends pre, so might as well be explicit -->\n",
"<pre>\n",
"-----\n",
"IPython 8.16.1\n",
"jupyter_client 8.4.0\n",
"jupyter_core 5.4.0\n",
"jupyterlab 4.0.7\n",
"notebook 7.0.5\n",
"-----\n",
"Python 3.11.7 (main, Dec 4 2023, 18:10:11) [Clang 15.0.0 (clang-1500.1.0.2.5)]\n",
"macOS-13.6.1-x86_64-i386-64bit\n",
"-----\n",
"Session information updated at 2024-02-01 15:19\n",
"</pre>\n",
"</details>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"session_info.show()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>name</th>\n",
" <th>array</th>\n",
" <th>result_value</th>\n",
" <th>result_type</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>(tfff, tfff)</td>\n",
" <td>ndarray</td>\n",
" <td>[0]</td>\n",
" <td>ndarray</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>(tfff, tfff)</td>\n",
" <td>csr_array</td>\n",
" <td>[0]</td>\n",
" <td>ndarray</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>(tfff, tfff)</td>\n",
" <td>csr_matrix</td>\n",
" <td>[[[[[0]]]]]</td>\n",
" <td>matrix</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>np.ix_((tfff, tfff))</td>\n",
" <td>ndarray</td>\n",
" <td>[[0]]</td>\n",
" <td>ndarray</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>np.ix_((tfff, tfff))</td>\n",
" <td>csr_array</td>\n",
" <td>[[0]]</td>\n",
" <td>csr_array</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>np.ix_((tfff, tfff))</td>\n",
" <td>csr_matrix</td>\n",
" <td>[[0]]</td>\n",
" <td>csr_matrix</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>(tfff, ttff)</td>\n",
" <td>ndarray</td>\n",
" <td>[0, 1]</td>\n",
" <td>ndarray</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>(tfff, ttff)</td>\n",
" <td>csr_array</td>\n",
" <td>[0, 1]</td>\n",
" <td>ndarray</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>(tfff, ttff)</td>\n",
" <td>csr_matrix</td>\n",
" <td>[[[[[0 1]]]]]</td>\n",
" <td>matrix</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>np.ix_((tfff, ttff))</td>\n",
" <td>ndarray</td>\n",
" <td>[[0, 1]]</td>\n",
" <td>ndarray</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>np.ix_((tfff, ttff))</td>\n",
" <td>csr_array</td>\n",
" <td>[[0, 1]]</td>\n",
" <td>csr_array</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>np.ix_((tfff, ttff))</td>\n",
" <td>csr_matrix</td>\n",
" <td>[[0, 1]]</td>\n",
" <td>csr_matrix</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>(ttff, ttff)</td>\n",
" <td>ndarray</td>\n",
" <td>[0, 5]</td>\n",
" <td>ndarray</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>(ttff, ttff)</td>\n",
" <td>csr_array</td>\n",
" <td>[0, 5]</td>\n",
" <td>ndarray</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>(ttff, ttff)</td>\n",
" <td>csr_matrix</td>\n",
" <td>[[[[[0 5]]]]]</td>\n",
" <td>matrix</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>np.ix_((ttff, ttff))</td>\n",
" <td>ndarray</td>\n",
" <td>[[0, 1], [4, 5]]</td>\n",
" <td>ndarray</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>np.ix_((ttff, ttff))</td>\n",
" <td>csr_array</td>\n",
" <td>[[0, 1], [4, 5]]</td>\n",
" <td>csr_array</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>np.ix_((ttff, ttff))</td>\n",
" <td>csr_matrix</td>\n",
" <td>[[0, 1], [4, 5]]</td>\n",
" <td>csr_matrix</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>(ttff, tttf)</td>\n",
" <td>ndarray</td>\n",
" <td>shape mismatch: indexing arrays could not be b...</td>\n",
" <td>IndexError</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>(ttff, tttf)</td>\n",
" <td>csr_array</td>\n",
" <td>shape mismatch: objects cannot be broadcast to...</td>\n",
" <td>ValueError</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>(ttff, tttf)</td>\n",
" <td>csr_matrix</td>\n",
" <td>shape mismatch: objects cannot be broadcast to...</td>\n",
" <td>ValueError</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>np.ix_((ttff, tttf))</td>\n",
" <td>ndarray</td>\n",
" <td>[[0, 1, 2], [4, 5, 6]]</td>\n",
" <td>ndarray</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>np.ix_((ttff, tttf))</td>\n",
" <td>csr_array</td>\n",
" <td>[[0, 1, 2], [4, 5, 6]]</td>\n",
" <td>csr_array</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>np.ix_((ttff, tttf))</td>\n",
" <td>csr_matrix</td>\n",
" <td>[[0, 1, 2], [4, 5, 6]]</td>\n",
" <td>csr_matrix</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" name array \\\n",
"1 (tfff, tfff) ndarray \n",
"9 (tfff, tfff) csr_array \n",
"17 (tfff, tfff) csr_matrix \n",
"5 np.ix_((tfff, tfff)) ndarray \n",
"13 np.ix_((tfff, tfff)) csr_array \n",
"21 np.ix_((tfff, tfff)) csr_matrix \n",
"0 (tfff, ttff) ndarray \n",
"8 (tfff, ttff) csr_array \n",
"16 (tfff, ttff) csr_matrix \n",
"4 np.ix_((tfff, ttff)) ndarray \n",
"12 np.ix_((tfff, ttff)) csr_array \n",
"20 np.ix_((tfff, ttff)) csr_matrix \n",
"2 (ttff, ttff) ndarray \n",
"10 (ttff, ttff) csr_array \n",
"18 (ttff, ttff) csr_matrix \n",
"6 np.ix_((ttff, ttff)) ndarray \n",
"14 np.ix_((ttff, ttff)) csr_array \n",
"22 np.ix_((ttff, ttff)) csr_matrix \n",
"3 (ttff, tttf) ndarray \n",
"11 (ttff, tttf) csr_array \n",
"19 (ttff, tttf) csr_matrix \n",
"7 np.ix_((ttff, tttf)) ndarray \n",
"15 np.ix_((ttff, tttf)) csr_array \n",
"23 np.ix_((ttff, tttf)) csr_matrix \n",
"\n",
" result_value result_type \n",
"1 [0] ndarray \n",
"9 [0] ndarray \n",
"17 [[[[[0]]]]] matrix \n",
"5 [[0]] ndarray \n",
"13 [[0]] csr_array \n",
"21 [[0]] csr_matrix \n",
"0 [0, 1] ndarray \n",
"8 [0, 1] ndarray \n",
"16 [[[[[0 1]]]]] matrix \n",
"4 [[0, 1]] ndarray \n",
"12 [[0, 1]] csr_array \n",
"20 [[0, 1]] csr_matrix \n",
"2 [0, 5] ndarray \n",
"10 [0, 5] ndarray \n",
"18 [[[[[0 5]]]]] matrix \n",
"6 [[0, 1], [4, 5]] ndarray \n",
"14 [[0, 1], [4, 5]] csr_array \n",
"22 [[0, 1], [4, 5]] csr_matrix \n",
"3 shape mismatch: indexing arrays could not be b... IndexError \n",
"11 shape mismatch: objects cannot be broadcast to... ValueError \n",
"19 shape mismatch: objects cannot be broadcast to... ValueError \n",
"7 [[0, 1, 2], [4, 5, 6]] ndarray \n",
"15 [[0, 1, 2], [4, 5, 6]] csr_array \n",
"23 [[0, 1, 2], [4, 5, 6]] csr_matrix "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np_array = np.arange(16).reshape(4, 4)\n",
"\n",
"tfff = np.array([True, False, False, False])\n",
"ttff = np.array([True, True, False, False])\n",
"tttf = np.array([True, True, True, False])\n",
"\n",
"arrays = [\n",
" np_array,\n",
" sparse.csr_array(np_array),\n",
" sparse.csr_matrix(np_array),\n",
"]\n",
"indexing_cases = [\n",
" (\"(tfff, ttff)\", (tfff, ttff)),\n",
" (\"(tfff, tfff)\", (tfff, tfff)),\n",
" (\"(ttff, ttff)\", (ttff, ttff)),\n",
" (\"(ttff, tttf)\", (ttff, tttf)),\n",
"]\n",
"indexing_cases.extend([(f\"np.ix_({name})\", np.ix_(*idx)) for name, idx in indexing_cases])\n",
"\n",
"records = []\n",
"\n",
"for array in arrays:\n",
" for name, idx in indexing_cases:\n",
" try:\n",
" result_value = array[idx]\n",
" result_type = type(result_value).__name__\n",
" if isinstance(result_value, (sparse.sparray, sparse.spmatrix)):\n",
" result_value = result_value.toarray()\n",
" except Exception as e:\n",
" result_value = e\n",
" result_type = type(e).__name__\n",
" records.append(dict(\n",
" name=name,\n",
" array=type(array).__name__,\n",
" result_value=result_value,\n",
" result_type=result_type,\n",
" ))\n",
"\n",
"df = pd.DataFrame(records)\n",
"df = df.loc[df[\"name\"].str.replace(\"np.ix_(\", \"\").sort_values(kind=\"stable\").index]\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.11.7"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment