Skip to content
Open

Smoo #71

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 144 additions & 0 deletions Notebooks_Unused/n_search_fail.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 5,
"id": "47f4a073",
"metadata": {},
"outputs": [],
"source": [
"%reload_ext autoreload\n",
"%autoreload 2"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "282a714d",
"metadata": {},
"outputs": [],
"source": [
"from cereeberus import Interleave, MapperGraph, ReebGraph\n",
"\n",
"import cereeberus.data.ex_reebgraphs as ex_rg\n",
"import cereeberus.data.ex_mappergraphs as ex_mg"
]
},
{
"cell_type": "markdown",
"id": "e191f088",
"metadata": {},
"source": [
"# Create torus and line mappers of mismatched heights"
]
},
{
"cell_type": "markdown",
"id": "d1a6c618",
"metadata": {},
"source": [
"### It works when the differnce is 1"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "6c6b8ae9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Interleaving distance: 3\n",
"Interleaving distance (with dist_fit): 3\n"
]
}
],
"source": [
"line = ex_mg.line(a=0, b= 16)\n",
"torus = ex_mg.torus(a=0, b =2, c = 13, d = 17)\n",
"myInt = Interleave(torus, line)\n",
"result = myInt.fit()\n",
"dist_result = myInt.dist_fit() # dist_fit function optimizes with the distance matrix\n",
"print(f\"Interleaving distance: {result}\")\n",
"print(f\"Interleaving distance (with dist_fit): {dist_result}\")"
]
},
{
"cell_type": "markdown",
"id": "30459cf0",
"metadata": {},
"source": [
"### But fails when the difference is more than 1"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "ee3dea41",
"metadata": {},
"outputs": [
{
"ename": "KeyError",
"evalue": "17",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[9], line 4\u001b[0m\n\u001b[1;32m 2\u001b[0m torus \u001b[38;5;241m=\u001b[39m ex_mg\u001b[38;5;241m.\u001b[39mtorus(a\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m, b \u001b[38;5;241m=\u001b[39m\u001b[38;5;241m2\u001b[39m, c \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m13\u001b[39m, d \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m18\u001b[39m)\n\u001b[1;32m 3\u001b[0m myInt \u001b[38;5;241m=\u001b[39m Interleave(torus, line)\n\u001b[0;32m----> 4\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mmyInt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 5\u001b[0m dist_result \u001b[38;5;241m=\u001b[39m myInt\u001b[38;5;241m.\u001b[39mdist_fit() \u001b[38;5;66;03m# dist_fit function optimizes with the distance matrix\u001b[39;00m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mInterleaving distance: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mresult\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n",
"File \u001b[0;32m~/Library/CloudStorage/OneDrive-MichiganStateUniversity/Documents/Research/Projects/Interleaving_to_ML/ceREEBerus/cereeberus/cereeberus/distance/interleave.py:66\u001b[0m, in \u001b[0;36mInterleave.fit\u001b[0;34m(self, pulp_solver, verbose, max_n_for_error)\u001b[0m\n\u001b[1;32m 64\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m min_n \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m checked_results:\n\u001b[1;32m 65\u001b[0m myAssgn \u001b[38;5;241m=\u001b[39m Assignment(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mF, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mG, n\u001b[38;5;241m=\u001b[39mmin_n)\n\u001b[0;32m---> 66\u001b[0m prob_status \u001b[38;5;241m=\u001b[39m \u001b[43mmyAssgn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptimize\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpulp_solver\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpulp_solver\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 68\u001b[0m checked_results[min_n] \u001b[38;5;241m=\u001b[39m (prob_status, myAssgn)\n\u001b[1;32m 70\u001b[0m prob_status, myAssgn \u001b[38;5;241m=\u001b[39m checked_results[min_n]\n",
"File \u001b[0;32m~/Library/CloudStorage/OneDrive-MichiganStateUniversity/Documents/Research/Projects/Interleaving_to_ML/ceREEBerus/cereeberus/cereeberus/distance/interleave.py:1816\u001b[0m, in \u001b[0;36mAssignment.optimize\u001b[0;34m(self, pulp_solver)\u001b[0m\n\u001b[1;32m 1804\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21moptimize\u001b[39m(\u001b[38;5;28mself\u001b[39m, pulp_solver \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[1;32m 1805\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Uses the ILP to find the best interleaving distance bound, returns the loss value found. Further, it stores the optimal phi and psi maps which can be returned using the ``self.phi`` and ``self.psi`` attributes respectively.\u001b[39;00m\n\u001b[1;32m 1806\u001b[0m \u001b[38;5;124;03m This function requires the `pulp` package to be installed.\u001b[39;00m\n\u001b[1;32m 1807\u001b[0m \u001b[38;5;124;03m \u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1813\u001b[0m \u001b[38;5;124;03m \u001b[39;00m\n\u001b[1;32m 1814\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m-> 1816\u001b[0m map_dict, prob_status \u001b[38;5;241m=\u001b[39m \u001b[43msolve_ilp\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpulp_solver\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mpulp_solver\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1818\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m prob_status \u001b[38;5;241m!=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mOptimal\u001b[39m\u001b[38;5;124m'\u001b[39m:\n\u001b[1;32m 1819\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n",
"File \u001b[0;32m~/Library/CloudStorage/OneDrive-MichiganStateUniversity/Documents/Research/Projects/Interleaving_to_ML/ceREEBerus/cereeberus/cereeberus/distance/ilp.py:169\u001b[0m, in \u001b[0;36msolve_ilp\u001b[0;34m(myAssgn, pulp_solver, verbose)\u001b[0m\n\u001b[1;32m 167\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m up_or_down \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mup\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;66;03m#NOTE: the change in block indices\u001b[39;00m\n\u001b[1;32m 168\u001b[0m bou_n \u001b[38;5;241m=\u001b[39m myAssgn\u001b[38;5;241m.\u001b[39mB_up(other_map, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mn\u001b[39m\u001b[38;5;124m'\u001b[39m)[block]\u001b[38;5;241m.\u001b[39mget_array()\n\u001b[0;32m--> 169\u001b[0m bou_0 \u001b[38;5;241m=\u001b[39m \u001b[43mmyAssgn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mB_up\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstarting_map\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m0\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m[\u001b[49m\u001b[43mblock\u001b[49m\u001b[43m]\u001b[49m\u001b[38;5;241m.\u001b[39mget_array()\n\u001b[1;32m 170\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m starting_map \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mF\u001b[39m\u001b[38;5;124m'\u001b[39m:\n\u001b[1;32m 171\u001b[0m map_V \u001b[38;5;241m=\u001b[39m myAssgn\u001b[38;5;241m.\u001b[39mphi(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m0\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mV\u001b[39m\u001b[38;5;124m'\u001b[39m)[block\u001b[38;5;241m+\u001b[39m\u001b[38;5;241m1\u001b[39m]\u001b[38;5;241m.\u001b[39mget_array()\n",
"File \u001b[0;32m~/Library/CloudStorage/OneDrive-MichiganStateUniversity/Documents/Research/Projects/Interleaving_to_ML/ceREEBerus/cereeberus/cereeberus/distance/labeled_blocks.py:539\u001b[0m, in \u001b[0;36mLabeledBlockMatrix.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 529\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__getitem__\u001b[39m(\u001b[38;5;28mself\u001b[39m, key):\n\u001b[1;32m 530\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 531\u001b[0m \u001b[38;5;124;03m Get the i'th block matrix.\u001b[39;00m\n\u001b[1;32m 532\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 537\u001b[0m \u001b[38;5;124;03m The item from the block matrix.\u001b[39;00m\n\u001b[1;32m 538\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 539\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mblocks\u001b[49m\u001b[43m[\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m]\u001b[49m\n",
"\u001b[0;31mKeyError\u001b[0m: 17"
]
}
],
"source": [
"line = ex_mg.line(a =0, b= 16)\n",
"torus = ex_mg.torus(a=0, b =2, c = 13, d = 18)\n",
"myInt = Interleave(torus, line)\n",
"result = myInt.fit()\n",
"dist_result = myInt.dist_fit() # dist_fit function optimizes with the distance matrix\n",
"print(f\"Interleaving distance: {result}\")\n",
"print(f\"Interleaving distance (with dist_fit): {dist_result}\")"
]
},
{
"cell_type": "markdown",
"id": "b442c31a",
"metadata": {},
"source": [
"I checked the code and I think the problem is in the boundary matrix computation. Which affects the edge-vertex parallelogram checks. Tried fixing, but haven't figured it out yet."
]
},
{
"cell_type": "markdown",
"id": "c17be785",
"metadata": {},
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "interleavingenv",
"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.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Loading