diff --git a/Notebooks/Baseline - Guichaoua - database.ipynb b/Notebooks/Baseline - Guichaoua - database.ipynb
deleted file mode 100644
index ee2a2b7a55b39f4974a662c9ae005f3086dc894f..0000000000000000000000000000000000000000
--- a/Notebooks/Baseline - Guichaoua - database.ipynb	
+++ /dev/null
@@ -1,565 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T16:52:48.152364Z",
-     "start_time": "2021-01-21T16:52:46.526078Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "import os\n",
-    "import time\n",
-    "\n",
-    "# Self-code imports\n",
-    "import polytopes.segmentation_algorithms as algos\n",
-    "from polytopes.model.note import Note\n",
-    "from polytopes.model.chord import Chord\n",
-    "import polytopes.polytopical_costs as pc\n",
-    "import polytopes.data_manipulation as dm\n",
-    "import polytopes.pattern_manip as pm\n",
-    "import polytopes.pattern_factory as pf\n",
-    "\n",
-    "\n",
-    "#Generic imports\n",
-    "import numpy as np\n",
-    "import matplotlib.pyplot as plt\n",
-    "import pandas as pd\n",
-    "import math\n",
-    "import copy\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T16:52:48.162337Z",
-     "start_time": "2021-01-21T16:52:48.154360Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "# Subset \n",
-    "#database_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Projects\\\\RWC_annotations\\\\subset_analysis\\\\\"\n",
-    "\n",
-    "# Database\n",
-    "database_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Projects\\\\RWC_annotations\\\\final_bimbot_al\\\\\"\n",
-    "\n",
-    "max_size = 10\n",
-    "\n",
-    "manual = []\n",
-    "\n",
-    "for file in os.listdir(database_path):\n",
-    "    bag_of_words = file.split(\".\")\n",
-    "    if bag_of_words[-1] == \"seq\":\n",
-    "        if bag_of_words[-3] == \"manual\":\n",
-    "            manual.append(file)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# My Code"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Direct antecedents"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T16:54:17.981841Z",
-     "start_time": "2021-01-21T16:52:48.165331Z"
-    }
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Prec: 0.2166, rap: 0.789, F measure: 0.3394\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "[]"
-      ]
-     },
-     "execution_count": 3,
-     "metadata": {},
-     "output_type": "execute_result"
-    },
-    {
-     "data": {
-      "image/png": "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\n",
-      "text/plain": [
-       "<Figure size 1080x360 with 1 Axes>"
-      ]
-     },
-     "metadata": {
-      "needs_background": "light"
-     },
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "annotations_folder_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Audio samples\\\\RWC Pop\\\\annotations\\\\final_bimbot\\\\\"\n",
-    "persisted_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\data_persisted\"\n",
-    "flow_folder = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Annotations MIREX Quaero\\\\annotations_as_flow\\\\\"\n",
-    "\n",
-    "all_res = []\n",
-    "all_res_one = []\n",
-    "distrib_segments = []\n",
-    "\n",
-    "for song in manual:\n",
-    "    song_number = song.split(\".\")[0]\n",
-    "\n",
-    "    with open(\"{}\\\\{}.flow_simple\".format(flow_folder, song_number),'r') as obj:\n",
-    "        bag_of_chords = obj.read().split(\"\\n\")\n",
-    "        while '' in bag_of_chords:\n",
-    "            bag_of_chords.remove('')\n",
-    "    \"\"\"bag_of_chords = dm.flowify_song(database_path + song)\n",
-    "    for couple in zip(bag_of_chords, a):\n",
-    "        if couple[0].triad != couple[1]:\n",
-    "            print(couple)\"\"\"\n",
-    "\n",
-    "    frontiers, _ = algos.dynamic_minimization_guichaoua(bag_of_chords, \n",
-    "                                                        positive_segment_size_penalty = 0, negative_segment_size_penalty = 0.125, \n",
-    "                                                        min_size = 8, max_size = max_size, target_size = 32, \n",
-    "                                                        positive_penalty = 2.25, negative_penalty = 3,\n",
-    "                                                        global_antecedents = False)\n",
-    "\n",
-    "    for fst, snd in zip(frontiers[:-1], frontiers[1:]):\n",
-    "        distrib_segments.append(snd - fst)\n",
-    "\n",
-    "    \"\"\"\n",
-    "    # Scores, computed on time\n",
-    "    song_number = song.split(\".\")[0]\n",
-    "    this_song_ann = dm.get_annotation_name_from_song(song_number, \"MIREX10\")\n",
-    "    annotation_path = \"{}\\\\{}\".format(annotations_folder_path, this_song_ann)\n",
-    "    annotations = dm.get_segmentation_from_txt(annotation_path, \"MIREX10\")\n",
-    "    references_segments = np.array(annotations)[:, 0:2]\n",
-    "    beats = np.load(\"{}\\\\beats\\\\{}.npy\".format(persisted_path, int(song_number)), allow_pickle=True)                \n",
-    "\n",
-    "    estimation = []\n",
-    "    for f in frontiers:\n",
-    "        if f < len(beats):\n",
-    "            estimation.append(beats[f])\n",
-    "        else:\n",
-    "            estimation.append(beats[-1])\n",
-    "    estimated_seg = dm.frontiers_to_segments(estimation)\n",
-    "\n",
-    "    prec, rec, fmes = dm.compute_score_of_segmentation(references_segments, estimated_seg, window_length = 0.5)\"\"\"\n",
-    "\n",
-    "    #Scores, computed on the beat annotation\n",
-    "    beat_indexed_segments = dm.frontiers_to_segments(frontiers)\n",
-    "\n",
-    "    song_number = song.split(\".\")[0]\n",
-    "    annot_name = \"{:03d}.manual.seg\".format(int(song_number))\n",
-    "    annotation_file = open(annotations_folder_path + annot_name,'r')\n",
-    "    annotation = annotation_file.read().replace(\"\\n\", \"\").split(\" \")\n",
-    "    annotation = np.array([int(x) - 1 for x in annotation])\n",
-    "    beat_indexed_annotation = np.array(dm.frontiers_to_segments(annotation))\n",
-    "    p, r, f = dm.compute_score_of_segmentation(beat_indexed_annotation, beat_indexed_segments, window_length = 0.5)\n",
-    "    all_res.append([p, r, f])\n",
-    "\n",
-    "results = np.array(all_res)\n",
-    "prec, rap, fmes = round(np.mean(results[:,0]),4), round(np.mean(results[:,1]),4), round(np.mean(results[:,2]),4)\n",
-    "print(\"Prec: {}, rap: {}, F measure: {}\".format(prec, rap, fmes))\n",
-    "plt.figure(figsize=(15,5))\n",
-    "plt.hist(distrib_segments, bins = range(max_size))\n",
-    "plt.xlabel(\"Segment's size (in nb of beats)\")\n",
-    "plt.title(\"Prec: {}, rap: {}, F measure: {}\".format(prec, rap, fmes))\n",
-    "plt.plot()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Global antecedents"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T16:55:39.626755Z",
-     "start_time": "2021-01-21T16:54:17.988820Z"
-    }
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Prec: 0.2166, rap: 0.789, F measure: 0.3394\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "[]"
-      ]
-     },
-     "execution_count": 4,
-     "metadata": {},
-     "output_type": "execute_result"
-    },
-    {
-     "data": {
-      "image/png": "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\n",
-      "text/plain": [
-       "<Figure size 1080x360 with 1 Axes>"
-      ]
-     },
-     "metadata": {
-      "needs_background": "light"
-     },
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "annotations_folder_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Audio samples\\\\RWC Pop\\\\annotations\\\\final_bimbot\\\\\"\n",
-    "persisted_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\data_persisted\"\n",
-    "flow_folder = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Annotations MIREX Quaero\\\\annotations_as_flow\\\\\"\n",
-    "\n",
-    "all_res = []\n",
-    "all_res_one = []\n",
-    "distrib_segments = []\n",
-    "\n",
-    "for song in manual:\n",
-    "    song_number = song.split(\".\")[0]\n",
-    "\n",
-    "    with open(\"{}\\\\{}.flow_simple\".format(flow_folder, song_number),'r') as obj:\n",
-    "        bag_of_chords = obj.read().split(\"\\n\")\n",
-    "        while '' in bag_of_chords:\n",
-    "            bag_of_chords.remove('')\n",
-    "    \"\"\"bag_of_chords = dm.flowify_song(database_path + song)\n",
-    "    for couple in zip(bag_of_chords, a):\n",
-    "        if couple[0].triad != couple[1]:\n",
-    "            print(couple)\"\"\"\n",
-    "\n",
-    "    frontiers, _ = algos.dynamic_minimization_guichaoua(bag_of_chords, \n",
-    "                                                        positive_segment_size_penalty = 0, negative_segment_size_penalty = 0.125, \n",
-    "                                                        min_size = 8, max_size = max_size, target_size = 32, \n",
-    "                                                        positive_penalty = 2.25, negative_penalty = 3,\n",
-    "                                                        global_antecedents = True)\n",
-    "\n",
-    "    for fst, snd in zip(frontiers[:-1], frontiers[1:]):\n",
-    "        distrib_segments.append(snd - fst)\n",
-    "\n",
-    "    \"\"\"\n",
-    "    # Scores, computed on time\n",
-    "    song_number = song.split(\".\")[0]\n",
-    "    this_song_ann = dm.get_annotation_name_from_song(song_number, \"MIREX10\")\n",
-    "    annotation_path = \"{}\\\\{}\".format(annotations_folder_path, this_song_ann)\n",
-    "    annotations = dm.get_segmentation_from_txt(annotation_path, \"MIREX10\")\n",
-    "    references_segments = np.array(annotations)[:, 0:2]\n",
-    "    beats = np.load(\"{}\\\\beats\\\\{}.npy\".format(persisted_path, int(song_number)), allow_pickle=True)                \n",
-    "\n",
-    "    estimation = []\n",
-    "    for f in frontiers:\n",
-    "        if f < len(beats):\n",
-    "            estimation.append(beats[f])\n",
-    "        else:\n",
-    "            estimation.append(beats[-1])\n",
-    "    estimated_seg = dm.frontiers_to_segments(estimation)\n",
-    "\n",
-    "    prec, rec, fmes = dm.compute_score_of_segmentation(references_segments, estimated_seg, window_length = 0.5)\"\"\"\n",
-    "\n",
-    "    #Scores, computed on the beat annotation\n",
-    "    beat_indexed_segments = dm.frontiers_to_segments(frontiers)\n",
-    "\n",
-    "    song_number = song.split(\".\")[0]\n",
-    "    annot_name = \"{:03d}.manual.seg\".format(int(song_number))\n",
-    "    annotation_file = open(annotations_folder_path + annot_name,'r')\n",
-    "    annotation = annotation_file.read().replace(\"\\n\", \"\").split(\" \")\n",
-    "    annotation = np.array([int(x) - 1 for x in annotation])\n",
-    "    beat_indexed_annotation = np.array(dm.frontiers_to_segments(annotation))\n",
-    "    p, r, f = dm.compute_score_of_segmentation(beat_indexed_annotation, beat_indexed_segments, window_length = 0.5)\n",
-    "    all_res.append([p, r, f])\n",
-    "\n",
-    "results = np.array(all_res)\n",
-    "prec, rap, fmes = round(np.mean(results[:,0]),4), round(np.mean(results[:,1]),4), round(np.mean(results[:,2]),4)\n",
-    "print(\"Prec: {}, rap: {}, F measure: {}\".format(prec, rap, fmes))\n",
-    "plt.figure(figsize=(15,5))\n",
-    "plt.hist(distrib_segments, bins = range(max_size))\n",
-    "plt.xlabel(\"Segment's size (in nb of beats)\")\n",
-    "plt.title(\"Prec: {}, rap: {}, F measure: {}\".format(prec, rap, fmes))\n",
-    "plt.plot()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Auto DB"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 7,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:02:50.877186Z",
-     "start_time": "2021-01-21T17:02:50.870179Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "# Subset \n",
-    "#database_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Projects\\\\RWC_annotations\\\\subset_analysis\\\\\"\n",
-    "\n",
-    "# Database\n",
-    "database_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Projects\\\\RWC_annotations\\\\final_bimbot_al\\\\\"\n",
-    "\n",
-    "max_size = 10\n",
-    "\n",
-    "auto = []\n",
-    "\n",
-    "for file in os.listdir(database_path):\n",
-    "    bag_of_words = file.split(\".\")\n",
-    "    if bag_of_words[-1] == \"seq\":\n",
-    "        if bag_of_words[-3] == \"auto\":\n",
-    "            auto.append(file)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 8,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:02:57.745449Z",
-     "start_time": "2021-01-21T17:02:51.072639Z"
-    }
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "001.auto.simple.seq\n",
-      "002.auto.simple.seq\n",
-      "003.auto.simple.seq\n",
-      "004.auto.simple.seq\n",
-      "005.auto.simple.seq\n",
-      "006.auto.simple.seq\n",
-      "007.auto.simple.seq\n",
-      "008.auto.simple.seq\n",
-      "009.auto.simple.seq\n"
-     ]
-    },
-    {
-     "ename": "InvalidChordNotesException",
-     "evalue": "Empty list of notes: a Chord must admit notes.",
-     "output_type": "error",
-     "traceback": [
-      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
-      "\u001b[1;31mInvalidChordNotesException\u001b[0m                Traceback (most recent call last)",
-      "\u001b[1;32m<ipython-input-8-13a94a056f18>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      6\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0msong\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mauto\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      7\u001b[0m     \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msong\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 8\u001b[1;33m     \u001b[0mauto_bag_of_chords\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdm\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mflowify_song\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdatabase_path\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0msong\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      9\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     10\u001b[0m     auto_frontiers, _ = algos.dynamic_minimization_guichaoua(auto_bag_of_chords, \n",
-      "\u001b[1;32mc:\\users\\amarmore\\desktop\\projects\\phd main projects\\on git\\code\\polytopes and relation\\polytopes\\data_manipulation.py\u001b[0m in \u001b[0;36mflowify_song\u001b[1;34m(path)\u001b[0m\n\u001b[0;32m    471\u001b[0m                             \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mchords\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    472\u001b[0m                                 \u001b[1;32mif\u001b[0m \u001b[0mi\u001b[0m \u001b[1;33m!=\u001b[0m \u001b[1;34m\"N\"\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 473\u001b[1;33m                                     \u001b[0mbag_of_chords\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mChord\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    474\u001b[0m                                     \u001b[1;32mbreak\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    475\u001b[0m     \u001b[1;32mreturn\u001b[0m \u001b[0mbag_of_chords\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;32mc:\\users\\amarmore\\desktop\\projects\\phd main projects\\on git\\code\\polytopes and relation\\polytopes\\model\\chord.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, a_chord, redundancy)\u001b[0m\n\u001b[0;32m     71\u001b[0m             \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_notes\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mlocal_notes\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     72\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_notes\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 73\u001b[1;33m                 \u001b[1;32mraise\u001b[0m \u001b[0merr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mInvalidChordNotesException\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Empty list of notes: a Chord must admit notes.\"\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     74\u001b[0m             \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_triad\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtriad_from_notes\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     75\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtriad\u001b[0m \u001b[1;33m!=\u001b[0m \u001b[0mcst\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mAMBIGUOUS\u001b[0m \u001b[1;32mand\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_redundant\u001b[0m\u001b[1;33m:\u001b[0m \u001b[1;31m# A redundant chord shouldn't be reordered as it corresponds to permutated chord (#TODO: rename the parameter ?)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;31mInvalidChordNotesException\u001b[0m: Empty list of notes: a Chord must admit notes."
-     ]
-    }
-   ],
-   "source": [
-    "annotations_folder_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Audio samples\\\\RWC Pop\\\\annotations\\\\final_bimbot\\\\\"\n",
-    "persisted_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\data_persisted\"\n",
-    "auto_res = []\n",
-    "auto_distrib_segments = []\n",
-    "\n",
-    "for song in auto:\n",
-    "    print(song)\n",
-    "    auto_bag_of_chords = dm.flowify_song(database_path + song)\n",
-    "\n",
-    "    auto_frontiers, _ = algos.dynamic_minimization_guichaoua(auto_bag_of_chords, \n",
-    "                                                             positive_segment_size_penalty = 0, negative_segment_size_penalty = 0.125, \n",
-    "                                                             min_size = 8, max_size = max_size, target_size = 32, \n",
-    "                                                             positive_penalty = 2.25, negative_penalty = 3)\n",
-    "\n",
-    "    for fst, snd in zip(auto_frontiers[:-1], auto_frontiers[1:]):\n",
-    "        auto_distrib_segments.append(snd - fst)\n",
-    "\n",
-    "    \"\"\"\n",
-    "    # Scores, computed on time\n",
-    "    song_number = song.split(\".\")[0]\n",
-    "    this_song_ann = dm.get_annotation_name_from_song(song_number, \"MIREX10\")\n",
-    "    annotation_path = \"{}\\\\{}\".format(annotations_folder_path, this_song_ann)\n",
-    "    annotations = dm.get_segmentation_from_txt(annotation_path, \"MIREX10\")\n",
-    "    references_segments = np.array(annotations)[:, 0:2]\n",
-    "    beats = np.load(\"{}\\\\beats\\\\{}.npy\".format(persisted_path, int(song_number)), allow_pickle=True)                \n",
-    "\n",
-    "    estimation = []\n",
-    "    for f in frontiers:\n",
-    "        if f < len(beats):\n",
-    "            estimation.append(beats[f])\n",
-    "        else:\n",
-    "            estimation.append(beats[-1])\n",
-    "    estimated_seg = dm.frontiers_to_segments(estimation)\n",
-    "\n",
-    "    prec, rec, fmes = dm.compute_score_of_segmentation(references_segments, estimated_seg, window_length = 0.5)\"\"\"\n",
-    "\n",
-    "    #Scores, computed on the beat annotation\n",
-    "    auto_beat_indexed_segments = dm.frontiers_to_segments(auto_frontiers)\n",
-    "\n",
-    "    song_number = song.split(\".\")[0]\n",
-    "    annot_name = \"{:03d}.auto.seg\".format(int(song_number))\n",
-    "    annotation_file = open(annotations_folder_path + annot_name,'r')\n",
-    "    annotation = annotation_file.read().replace(\"\\n\", \"\").split(\" \")\n",
-    "    annotation = np.array([int(x) - 1 for x in annotation if x !=''])\n",
-    "    beat_indexed_annotation = np.array(dm.frontiers_to_segments(annotation))\n",
-    "    p, r, f = dm.compute_score_of_segmentation(beat_indexed_annotation, auto_beat_indexed_segments, window_length = 0.5)\n",
-    "    auto_res.append([p, r, f])\n",
-    "\n",
-    "results = np.array(auto_res)\n",
-    "prec, rap, fmes = round(np.mean(results[:,0]),4), round(np.mean(results[:,1]),4), round(np.mean(results[:,2]),4)\n",
-    "print(\"Prec: {}, rap: {}, F measure: {}\".format(prec, rap, fmes))\n",
-    "plt.figure(figsize=(15,5))\n",
-    "plt.hist(auto_distrib_segments, bins = range(max_size))\n",
-    "plt.xlabel(\"Segment's size (in nb of beats)\")\n",
-    "plt.title(\"Prec: {}, rap: {}, F measure: {}\".format(prec, rap, fmes))\n",
-    "plt.plot()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# His outputs"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:02:49.838365Z",
-     "start_time": "2021-01-21T16:52:46.524Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "annotations_folder_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Audio samples\\\\RWC Pop\\\\annotations\\\\final_bimbot\\\\\"\n",
-    "flow_file_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Annotations MIREX Quaero\\\\annotations_as_flow\\\\\"\n",
-    "all_res = []\n",
-    "g_distrib_segments = []\n",
-    "for song in manual:\n",
-    "    bag_of_chords = dm.flowify_song(database_path + song)\n",
-    "    song_number = song.split(\".\")[0]\n",
-    "    guichaoua_estimates = open(flow_file_path + \"Guichaoua Estimates\\\\Experiments\\\\{:03d}_0penalties.frontiers_estimated\".format(int(song_number)), \"r\")\n",
-    "    tab = guichaoua_estimates.read().split(\" \")\n",
-    "    guichaoua_frontiers = [int(i) - 1 for i in tab if i != \"\\n\"]\n",
-    "    if guichaoua_frontiers[-1] < len(bag_of_chords)-1:\n",
-    "        guichaoua_frontiers.append(len(bag_of_chords)-1)\n",
-    "        \n",
-    "    for fst, snd in zip(guichaoua_frontiers[:-1], guichaoua_frontiers[1:]):\n",
-    "        g_distrib_segments.append(snd - fst)\n",
-    "\n",
-    "    beat_indexed_segments = dm.frontiers_to_segments(guichaoua_frontiers)\n",
-    "\n",
-    "    annot_name = \"{:03d}.manual.seg\".format(int(song_number))\n",
-    "    annotation_file = open(annotations_folder_path + annot_name,'r')\n",
-    "    annotation = annotation_file.read().replace(\"\\n\", \"\").split(\" \")\n",
-    "    annotation = np.array([int(x) - 1 for x in annotation])\n",
-    "    beat_indexed_annotation = np.array(dm.frontiers_to_segments(annotation))\n",
-    "    p, r, f = dm.compute_score_of_segmentation(beat_indexed_annotation, beat_indexed_segments, window_length = 0.2)\n",
-    "    all_res.append([p, r, f])\n",
-    "\n",
-    "results = np.array(all_res)\n",
-    "prec, rap, fmes = round(np.mean(results[:,0]),4), round(np.mean(results[:,1]),4), round(np.mean(results[:,2]),4)\n",
-    "print(\"Prec: {}, rap: {}, F measure: {}\".format(prec, rap, fmes))\n",
-    "\n",
-    "plt.figure(figsize=(15,5))\n",
-    "plt.hist(g_distrib_segments, bins = range(max_size))\n",
-    "plt.xlabel(\"Segment's size (in nb of beats)\")\n",
-    "#plt.title(\"Prec: {}, rap: {}, F measure: {}\".format(prec, rap, fmes))\n",
-    "plt.plot()"
-   ]
-  },
-  {
-   "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.7.5"
-  },
-  "toc": {
-   "base_numbering": 1,
-   "nav_menu": {},
-   "number_sections": true,
-   "sideBar": true,
-   "skip_h1_title": false,
-   "title_cell": "Table of Contents",
-   "title_sidebar": "Contents",
-   "toc_cell": false,
-   "toc_position": {},
-   "toc_section_display": true,
-   "toc_window_display": false
-  },
-  "varInspector": {
-   "cols": {
-    "lenName": 16,
-    "lenType": 16,
-    "lenVar": 40
-   },
-   "kernels_config": {
-    "python": {
-     "delete_cmd_postfix": "",
-     "delete_cmd_prefix": "del ",
-     "library": "var_list.py",
-     "varRefreshCmd": "print(var_dic_list())"
-    },
-    "r": {
-     "delete_cmd_postfix": ") ",
-     "delete_cmd_prefix": "rm(",
-     "library": "var_list.r",
-     "varRefreshCmd": "cat(var_dic_list()) "
-    }
-   },
-   "types_to_exclude": [
-    "module",
-    "function",
-    "builtin_function_or_method",
-    "instance",
-    "_Feature"
-   ],
-   "window_display": false
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/Notebooks/Baseline - Guichaoua - on song.ipynb b/Notebooks/Baseline - Guichaoua - on song.ipynb
deleted file mode 100644
index 1ae901c3c7155773bc2fde4d92afd853b388e369..0000000000000000000000000000000000000000
--- a/Notebooks/Baseline - Guichaoua - on song.ipynb	
+++ /dev/null
@@ -1,439 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:24:43.535284Z",
-     "start_time": "2021-01-21T17:24:42.354227Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "import os\n",
-    "import time\n",
-    "\n",
-    "# Self-code imports\n",
-    "import polytopes.segmentation_algorithms as algos\n",
-    "from polytopes.model.note import Note\n",
-    "from polytopes.model.chord import Chord\n",
-    "import polytopes.polytopical_costs as pc\n",
-    "import polytopes.data_manipulation as dm\n",
-    "import polytopes.segmentation_helper as sh\n",
-    "import polytopes.pattern_manip as pm\n",
-    "import polytopes.pattern_factory as pf\n",
-    "\n",
-    "#Generic imports\n",
-    "import numpy as np\n",
-    "import matplotlib.pyplot as plt\n",
-    "import pandas as pd\n",
-    "import math\n",
-    "import copy"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:24:43.541244Z",
-     "start_time": "2021-01-21T17:24:43.536292Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "# Hyperparams\n",
-    "max_size = 47\n",
-    "min_size = 8\n",
-    "positive_segment_size_penalty = 0\n",
-    "negative_segment_size_penalty = 0.125\n",
-    "target_size = 32\n",
-    "positive_penalty = 2.25\n",
-    "negative_penalty = 3"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# On a song"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:24:43.550219Z",
-     "start_time": "2021-01-21T17:24:43.544234Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "flow_file_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Annotations MIREX Quaero\\\\annotations_as_flow\\\\\"\n",
-    "song = \"001\"\n",
-    "bag_of_chords = []\n",
-    "file = open(flow_file_path + song + \".flow\", \"r\") \n",
-    "for chord in file.readlines():\n",
-    "    bag_of_chords.append(chord.split(\"\\n\")[0])"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:29:36.388412Z",
-     "start_time": "2021-01-21T17:24:43.552214Z"
-    }
-   },
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "c:\\users\\amarmore\\desktop\\projects\\phd main projects\\on git\\code\\polytopes and relation\\polytopes\\segmentation_algorithms.py:398: UserWarning: No Polytope is available for this size of segment. Trying sequential cost instead.\n",
-      "  warnings.warn(\"No Polytope is available for this size of segment. Trying sequential cost instead.\")\n"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "My frontiers: [0, 20, 52, 84, 112, 144, 176, 192, 220, 252, 284, 292, 332, 364, 396, 428, 462]\n",
-      "My frontiers, but global: [0, 20, 52, 84, 112, 144, 176, 192, 220, 252, 284, 292, 332, 364, 396, 428, 462]\n",
-      "Cost: 113.25, and global: 113.25\n",
-      "Guichaoua's frontiers: [0, 20, 52, 84, 112, 144, 176, 192, 220, 252, 284, 292, 332, 364, 396, 428, 462]\n",
-      "Equality ? True\n",
-      "\n"
-     ]
-    }
-   ],
-   "source": [
-    "frontiers_global, cost_global = algos.dynamic_minimization_guichaoua(bag_of_chords, global_antecedents = True)\n",
-    "frontiers, cost = algos.dynamic_minimization_guichaoua(bag_of_chords, global_antecedents = False)\n",
-    "\n",
-    "print(\"My frontiers: {}\".format(frontiers))\n",
-    "print(\"My frontiers, but global: {}\".format(frontiers_global))\n",
-    "print(\"Cost: {}, and global: {}\".format(cost, cost_global))\n",
-    "\n",
-    "guichaoua_estimates = open(flow_file_path + \"Guichaoua Estimates\\\\Experiments\\\\\" + song + \".frontiers_estimated\", \"r\")\n",
-    "tab = guichaoua_estimates.read().split(\" \")\n",
-    "guichaoua_frontiers = [int(i) - 1 for i in tab if i != \"\\n\"]\n",
-    "guichaoua_frontiers.append(frontiers[-1])\n",
-    "print(\"Guichaoua's frontiers: {}\".format(guichaoua_frontiers))\n",
-    "print(\"Equality ? {}\\n\".format(guichaoua_frontiers == frontiers))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:29:36.398384Z",
-     "start_time": "2021-01-21T17:29:36.391403Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "string = \"\"\n",
-    "for i in frontiers:\n",
-    "    string += str(i + 1) + \" \"\n",
-    "file = open(flow_file_path + \"Marmoret Estimates\\\\\" + song + \".frontiers_estimated\", \"w\")\n",
-    "file.write(string)\n",
-    "file.close()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 6,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:29:53.555232Z",
-     "start_time": "2021-01-21T17:29:36.401377Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Cost: 7.75 at (0, 20)\n",
-      "Cost: 6 at (20, 52)\n",
-      "Cost: 5 at (52, 84)\n",
-      "Cost: 8.5 at (84, 112)\n",
-      "Cost: 4 at (112, 144)\n",
-      "Cost: 6 at (144, 176)\n",
-      "Cost: 7.0 at (176, 192)\n",
-      "Cost: 8.5 at (192, 220)\n",
-      "Cost: 4 at (220, 252)\n",
-      "Cost: 6 at (252, 284)\n",
-      "Cost: 6.0 at (284, 292)\n",
-      "Cost: 13.25 at (292, 332)\n",
-      "Cost: 7 at (332, 364)\n",
-      "Cost: 6 at (364, 396)\n",
-      "Cost: 8 at (396, 428)\n",
-      "Cost: 10.25 at (428, 462)\n",
-      "Ze sum:113.25\n"
-     ]
-    }
-   ],
-   "source": [
-    "#frontiers = [0, 20,52,84,112,144,176,192,220,252,284, 292, 332,364,396, 428, 462]\n",
-    "the_sum = 0\n",
-    "for start, end in zip(frontiers[:-1], frontiers[1:]):\n",
-    "    segment = bag_of_chords[start:end]\n",
-    "    #print(segment)\n",
-    "    size = len(segment)\n",
-    "    bag_of_patterns = sh.compute_patterns_with_global_antecedents_for_size(size)\n",
-    "    the_min = math.inf\n",
-    "    best_pattern = None\n",
-    "    for a_pattern in bag_of_patterns:\n",
-    "        cost = pc.guichaoua_cost_global_antecedents_successors(segment, a_pattern[0], a_pattern[3], a_pattern[4], a_pattern[5])\n",
-    "        cost += pc.irregularities_penalty_guichaoua(adding_code = a_pattern[1], deleting_code = a_pattern[2], positive_penalty = positive_penalty, negative_penalty = negative_penalty)\n",
-    "        if cost < the_min:\n",
-    "            best_pattern = a_pattern\n",
-    "            the_min = cost\n",
-    "    #print(best_pattern)\n",
-    "    the_min += sh.penalty_cost_guichaoua(size, target_size = 32, positive_segment_size_penalty = positive_segment_size_penalty, negative_segment_size_penalty = negative_segment_size_penalty)\n",
-    "    #print(pm.recursive_chords_on_pattern(best_pattern[0],segment))\n",
-    "    print(\"Cost: {} at {}\".format(the_min, (start, end)))#, pm.recursive_chords_on_pattern(best_pattern[0],segment)))\n",
-    "    #print(\"local_cost: {}\\n\".format(local_costs[end - 1]))\n",
-    "    the_sum += the_min\n",
-    "print(\"Ze sum:{}\".format(the_sum))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 7,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:29:54.956883Z",
-     "start_time": "2021-01-21T17:29:53.560219Z"
-    }
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "['Eb', 'Eb', 'Eb', 'Eb', 'Abm', 'Abm', 'Abm', 'Abm', 'E', 'E', 'E', 'E', 'F#', 'F#', 'Eb', 'Eb', 'Abm', 'Abm', 'Abm', 'Abm', 'Abm', 'Abm', 'E', 'Eb', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ab', 'Ebm', 'Ebm', 'Ebm', 'Ebm']\n",
-      "[[[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['F#', 'F#'], ['Eb', 'Eb']]]], [[[['Abm', 'Abm'], ['Abm', 'Abm']], [['Abm', 'Abm'], ['E', 'Eb']]], [[['Ebm', 'Ebm'], ['Ebm', 'Ebm']], [[('Ebm', 'Ebm'), ('Ebm', 'Ab')], [('Ebm', 'Ebm'), ('Ebm', 'Ebm')]]]]]\n",
-      "Cost: 15\n"
-     ]
-    }
-   ],
-   "source": [
-    "segment = bag_of_chords[268:304]\n",
-    "print(segment)\n",
-    "size = len(segment)\n",
-    "bag_of_patterns = sh.compute_patterns_with_global_antecedents_for_size(size)\n",
-    "the_min = math.inf\n",
-    "best_pattern = None\n",
-    "for a_pattern in bag_of_patterns[0:1]:\n",
-    "    cost = pc.guichaoua_cost_global_antecedents_successors(segment, a_pattern[0], a_pattern[3], a_pattern[4], a_pattern[5])\n",
-    "    #cost += pc.irregularities_penalty_guichaoua(adding_code = a_pattern[1], deleting_code = a_pattern[2], positive_penalty = positive_penalty, negative_penalty = negative_penalty)\n",
-    "    if cost < the_min:\n",
-    "        best_pattern = a_pattern\n",
-    "        the_min = cost\n",
-    "print(pf.apply_chords_on_pattern(best_pattern[0],segment))\n",
-    "print(\"Cost: {}\".format(cost))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 8,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:30:04.595293Z",
-     "start_time": "2021-01-21T17:29:54.960875Z"
-    }
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Cost: 7.75 at (0, 20)\n",
-      "Cost: 6 at (20, 52)\n",
-      "Cost: 5 at (52, 84)\n",
-      "Cost: 8.5 at (84, 112)\n",
-      "Cost: 4 at (112, 144)\n",
-      "Cost: 6 at (144, 176)\n",
-      "Cost: 7.0 at (176, 192)\n",
-      "Cost: 8.5 at (192, 220)\n",
-      "Cost: 4 at (220, 252)\n",
-      "Cost: 6 at (252, 284)\n",
-      "Cost: 6.0 at (284, 292)\n",
-      "Cost: 13.25 at (292, 332)\n",
-      "Cost: 7 at (332, 364)\n",
-      "Cost: 6 at (364, 396)\n",
-      "Cost: 8 at (396, 428)\n",
-      "Cost: 10.25 at (428, 462)\n",
-      "Ze sum:113.25\n"
-     ]
-    }
-   ],
-   "source": [
-    "the_sum = 0\n",
-    "for start, end in zip(guichaoua_frontiers[:-1], guichaoua_frontiers[1:]):\n",
-    "    segment = bag_of_chords[start:end]\n",
-    "    size = len(segment)\n",
-    "    bag_of_patterns = sh.compute_patterns_with_antecedents_for_size(size)\n",
-    "    the_min = math.inf\n",
-    "    best_pattern = None\n",
-    "    for a_pattern in bag_of_patterns:\n",
-    "        cost = pc.guichaoua_cost(segment, a_pattern[0], a_pattern[3], a_pattern[4], a_pattern[5])\n",
-    "        cost += pc.irregularities_penalty_guichaoua(adding_code = a_pattern[1], deleting_code = a_pattern[2], positive_penalty = positive_penalty, negative_penalty = negative_penalty)\n",
-    "        if cost < the_min:\n",
-    "            best_pattern = a_pattern\n",
-    "            the_min = cost\n",
-    "    the_min += sh.penalty_cost_guichaoua(size, target_size = 32, positive_segment_size_penalty = positive_segment_size_penalty, negative_segment_size_penalty = negative_segment_size_penalty)\n",
-    "    #print(pm.recursive_chords_on_pattern(best_pattern[0],segment))\n",
-    "    print(\"Cost: {} at {}\".format(the_min, (start, end)))\n",
-    "    the_sum += the_min\n",
-    "print(\"Ze sum:{}\".format(the_sum))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 9,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:30:04.926356Z",
-     "start_time": "2021-01-21T17:30:04.597287Z"
-    },
-    "scrolled": false
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "[[[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['B', 'B'], ['B', 'B']]]], [[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[[('E', 'E'), ('E', 'E')], [('F#', 'F#'), ('Eb', 'Eb')]], [[('Abm', 'Abm'), ('Abm', 'Abm')], [('Abm', 'Abm'), ('E', 'Eb')]]]]]\n",
-      "Cost: 10\n",
-      "Cost irreg': 12.25\n",
-      "Cost penalty: 12.25\n",
-      "[[[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['B', 'B'], ['B', 'B']]]], [[[['Eb', 'Eb'], ['Eb', 'Eb']], [[('Abm', 'Abm'), ('Abm', 'Abm')], [('E', 'E'), ('E', 'E')]]], [[['F#', 'F#'], ['Eb', 'Eb']], [[('Abm', 'Abm'), ('Abm', 'Abm')], [('Abm', 'Abm'), ('E', 'Eb')]]]]]\n",
-      "Cost: 11\n",
-      "Cost irreg': 13.25\n",
-      "Cost penalty: 13.25\n",
-      "[[[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['B', 'B'], ['B', 'B']]]], [[[['Eb', 'Eb'], [('Eb', 'Eb'), ('Abm', 'Abm')]], [['Abm', 'Abm'], [('E', 'E'), ('E', 'E')]]], [[['F#', 'F#'], [('Eb', 'Eb'), ('Abm', 'Abm')]], [['Abm', 'Abm'], [('Abm', 'Abm'), ('E', 'Eb')]]]]]\n",
-      "Cost: 14\n",
-      "Cost irreg': 16.25\n",
-      "Cost penalty: 16.25\n",
-      "[[[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['B', 'B'], ['B', 'B']]]], [[[['Eb', ('Eb', 'Eb')], ['Eb', ('Abm', 'Abm')]], [['Abm', ('Abm', 'E')], ['E', ('E', 'E')]]], [[['F#', ('F#', 'Eb')], ['Eb', ('Abm', 'Abm')]], [['Abm', ('Abm', 'Abm')], ['Abm', ('E', 'Eb')]]]]]\n",
-      "Cost: 19\n",
-      "Cost irreg': 21.25\n",
-      "Cost penalty: 21.25\n",
-      "[[[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [[('B', 'B'), ('B', 'B')], [('Eb', 'Eb'), ('Eb', 'Eb')]]]], [[[['Abm', 'Abm'], ['Abm', 'Abm']], [['E', 'E'], ['E', 'E']]], [[['F#', 'F#'], ['Eb', 'Eb']], [[('Abm', 'Abm'), ('Abm', 'Abm')], [('Abm', 'Abm'), ('E', 'Eb')]]]]]\n",
-      "Cost: 13\n",
-      "Cost irreg': 15.25\n",
-      "Cost penalty: 15.25\n",
-      "[[[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], [('E', 'E'), ('B', 'B')]], [['B', 'B'], [('Eb', 'Eb'), ('Eb', 'Eb')]]]], [[[['Abm', 'Abm'], ['Abm', 'Abm']], [['E', 'E'], ['E', 'E']]], [[['F#', 'F#'], [('Eb', 'Eb'), ('Abm', 'Abm')]], [['Abm', 'Abm'], [('Abm', 'Abm'), ('E', 'Eb')]]]]]\n",
-      "Cost: 16\n",
-      "Cost irreg': 18.25\n",
-      "Cost penalty: 18.25\n",
-      "[[[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', ('E', 'E')], ['E', ('B', 'B')]], [['B', ('B', 'Eb')], ['Eb', ('Eb', 'Eb')]]]], [[[['Abm', 'Abm'], ['Abm', 'Abm']], [['E', 'E'], ['E', 'E']]], [[['F#', ('F#', 'Eb')], ['Eb', ('Abm', 'Abm')]], [['Abm', ('Abm', 'Abm')], ['Abm', ('E', 'Eb')]]]]]\n",
-      "Cost: 21\n",
-      "Cost irreg': 23.25\n",
-      "Cost penalty: 23.25\n",
-      "[[[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], [('Abm', 'Abm'), ('E', 'E')]]], [[['E', 'E'], ['B', 'B']], [['B', 'B'], [('Eb', 'Eb'), ('Eb', 'Eb')]]]], [[[['Abm', 'Abm'], ['Abm', 'Abm']], [['E', 'E'], [('E', 'E'), ('F#', 'F#')]]], [[['Eb', 'Eb'], ['Abm', 'Abm']], [['Abm', 'Abm'], [('Abm', 'Abm'), ('E', 'Eb')]]]]]\n",
-      "Cost: 17\n",
-      "Cost irreg': 19.25\n",
-      "Cost penalty: 19.25\n",
-      "[[[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', ('Abm', 'Abm')], ['Abm', ('E', 'E')]]], [[['E', 'E'], ['B', 'B']], [['B', ('B', 'Eb')], ['Eb', ('Eb', 'Eb')]]]], [[[['Abm', 'Abm'], ['Abm', 'Abm']], [['E', ('E', 'E')], ['E', ('F#', 'F#')]]], [[['Eb', 'Eb'], ['Abm', 'Abm']], [['Abm', ('Abm', 'Abm')], ['Abm', ('E', 'Eb')]]]]]\n",
-      "Cost: 19\n",
-      "Cost irreg': 21.25\n",
-      "Cost penalty: 21.25\n",
-      "[[[[['Eb', 'Eb'], ['Eb', ('Eb', 'Abm')]], [['Abm', 'Abm'], ['Abm', ('E', 'E')]]], [[['E', 'E'], ['B', ('B', 'B')]], [['B', 'Eb'], ['Eb', ('Eb', 'Eb')]]]], [[[['Abm', 'Abm'], ['Abm', ('Abm', 'E')]], [['E', 'E'], ['E', ('F#', 'F#')]]], [[['Eb', 'Eb'], ['Abm', ('Abm', 'Abm')]], [['Abm', 'Abm'], ['Abm', ('E', 'Eb')]]]]]\n",
-      "Cost: 26\n",
-      "Cost irreg': 28.25\n",
-      "Cost penalty: 28.25\n"
-     ]
-    }
-   ],
-   "source": [
-    "segment = bag_of_chords[252:292]\n",
-    "#print(segment)\n",
-    "size = len(segment)\n",
-    "bag_of_patterns = sh.compute_patterns_with_antecedents_for_size(size)\n",
-    "the_min = math.inf\n",
-    "best_pattern = None\n",
-    "for a_pattern in bag_of_patterns:\n",
-    "    print(pf.recursive_chords_on_pattern(a_pattern[0],segment))\n",
-    "    cost = pc.guichaoua_cost(segment, a_pattern[0], a_pattern[3], a_pattern[4], a_pattern[5])\n",
-    "    print(\"Cost: {}\".format(cost))#, pm.recursive_chords_on_pattern(best_pattern[0],segment)))\n",
-    "    cost += pc.irregularities_penalty_guichaoua(adding_code = a_pattern[1], deleting_code = a_pattern[2], positive_penalty = positive_penalty, negative_penalty = negative_penalty)\n",
-    "    print(\"Cost irreg': {}\".format(cost))#, pm.recursive_chords_on_pattern(best_pattern[0],segment)))\n",
-    "    cost += sh.penalty_cost_guichaoua(size, target_size = 32, positive_segment_size_penalty = positive_segment_size_penalty, negative_segment_size_penalty = negative_segment_size_penalty)\n",
-    "    print(\"Cost penalty: {}\".format(cost))#, pm.recursive_chords_on_pattern(best_pattern[0],segment)))\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.7.5"
-  },
-  "toc": {
-   "base_numbering": 1,
-   "nav_menu": {},
-   "number_sections": true,
-   "sideBar": true,
-   "skip_h1_title": false,
-   "title_cell": "Table of Contents",
-   "title_sidebar": "Contents",
-   "toc_cell": false,
-   "toc_position": {},
-   "toc_section_display": true,
-   "toc_window_display": false
-  },
-  "varInspector": {
-   "cols": {
-    "lenName": 16,
-    "lenType": 16,
-    "lenVar": 40
-   },
-   "kernels_config": {
-    "python": {
-     "delete_cmd_postfix": "",
-     "delete_cmd_prefix": "del ",
-     "library": "var_list.py",
-     "varRefreshCmd": "print(var_dic_list())"
-    },
-    "r": {
-     "delete_cmd_postfix": ") ",
-     "delete_cmd_prefix": "rm(",
-     "library": "var_list.r",
-     "varRefreshCmd": "cat(var_dic_list()) "
-    }
-   },
-   "types_to_exclude": [
-    "module",
-    "function",
-    "builtin_function_or_method",
-    "instance",
-    "_Feature"
-   ],
-   "window_display": false
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/Notebooks/Baseline - Louboutin - on database.ipynb b/Notebooks/Baseline - Louboutin - on database.ipynb
deleted file mode 100644
index 1cc3a9fe441251b13b960ed1e92cf9243c60aba9..0000000000000000000000000000000000000000
--- a/Notebooks/Baseline - Louboutin - on database.ipynb	
+++ /dev/null
@@ -1,238 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:06:55.721737Z",
-     "start_time": "2021-01-21T17:06:53.345094Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "import os\n",
-    "import time\n",
-    "\n",
-    "# Self-code imports\n",
-    "import polytopes.segmentation_algorithms as algos\n",
-    "from polytopes.model.note import Note\n",
-    "from polytopes.model.chord import Chord\n",
-    "import polytopes.polytopical_costs as pc\n",
-    "import polytopes.data_manipulation as dm\n",
-    "import polytopes.pattern_manip as pm\n",
-    "import polytopes.pattern_factory as pf\n",
-    "\n",
-    "#Generic imports\n",
-    "import numpy as np\n",
-    "import matplotlib.pyplot as plt\n",
-    "import pandas as pd\n",
-    "import math\n",
-    "import copy"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:06:55.740687Z",
-     "start_time": "2021-01-21T17:06:55.726725Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "# Subset \n",
-    "#database_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Projects\\\\RWC_annotations\\\\subset_analysis\\\\\"\n",
-    "\n",
-    "# Database\n",
-    "database_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Projects\\\\RWC_annotations\\\\final_bimbot_al\\\\\"\n",
-    "\n",
-    "max_size = 10\n",
-    "\n",
-    "manual = []\n",
-    "\n",
-    "for file in os.listdir(database_path):\n",
-    "    bag_of_words = file.split(\".\")\n",
-    "    if bag_of_words[-1] == \"seq\":\n",
-    "        if bag_of_words[-3] == \"manual\":\n",
-    "            manual.append(file)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# My Code"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:10:19.258790Z",
-     "start_time": "2021-01-21T17:06:55.748666Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "c:\\users\\amarmore\\desktop\\projects\\phd main projects\\on git\\code\\polytopes and relation\\polytopes\\segmentation_algorithms.py:522: UserWarning: No Polytope is available for this size of segment. Trying sequential cost instead.\n",
-      "  warnings.warn(\"No Polytope is available for this size of segment. Trying sequential cost instead.\")\n"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Prec: 0.1969, rap: 0.7022, F measure: 0.307\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "[]"
-      ]
-     },
-     "execution_count": 3,
-     "metadata": {},
-     "output_type": "execute_result"
-    },
-    {
-     "data": {
-      "image/png": "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\n",
-      "text/plain": [
-       "<Figure size 1080x360 with 1 Axes>"
-      ]
-     },
-     "metadata": {
-      "needs_background": "light"
-     },
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "annotations_folder_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Audio samples\\\\RWC Pop\\\\annotations\\\\final_bimbot\\\\\"\n",
-    "persisted_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\data_persisted\"\n",
-    "\n",
-    "all_res = []\n",
-    "all_res_one = []\n",
-    "distrib_segments = []\n",
-    "for song in manual:\n",
-    "    bag_of_chords = dm.flowify_song(database_path + song)\n",
-    "\n",
-    "    frontiers, _ = algos.dynamic_minimization_louboutin(bag_of_chords, segment_size_penalty = 0.125, min_size = 8, max_size = max_size, target_size = 32, irregularity_penalty = 1)\n",
-    "\n",
-    "    for fst, snd in zip(frontiers[:-1], frontiers[1:]):\n",
-    "        distrib_segments.append(snd - fst)\n",
-    "\n",
-    "    \"\"\"\n",
-    "    # Scores, computed on time\n",
-    "    song_number = song.split(\".\")[0]\n",
-    "    this_song_ann = dm.get_annotation_name_from_song(song_number, \"MIREX10\")\n",
-    "    annotation_path = \"{}\\\\{}\".format(annotations_folder_path, this_song_ann)\n",
-    "    annotations = dm.get_segmentation_from_txt(annotation_path, \"MIREX10\")\n",
-    "    references_segments = np.array(annotations)[:, 0:2]\n",
-    "    beats = np.load(\"{}\\\\beats\\\\{}.npy\".format(persisted_path, int(song_number)), allow_pickle=True)                \n",
-    "\n",
-    "    estimation = []\n",
-    "    for f in frontiers:\n",
-    "        if f < len(beats):\n",
-    "            estimation.append(beats[f])\n",
-    "        else:\n",
-    "            estimation.append(beats[-1])\n",
-    "    estimated_seg = dm.frontiers_to_segments(estimation)\n",
-    "\n",
-    "    prec, rec, fmes = dm.compute_score_of_segmentation(references_segments, estimated_seg, window_length = 0.5)\"\"\"\n",
-    "\n",
-    "    #Scores, computed on the beat annotation\n",
-    "    beat_indexed_segments = dm.frontiers_to_segments(frontiers)\n",
-    "\n",
-    "    song_number = song.split(\".\")[0]\n",
-    "    annot_name = \"{:03d}.manual.seg\".format(int(song_number))\n",
-    "    annotation_file = open(annotations_folder_path + annot_name,'r')\n",
-    "    annotation = annotation_file.read().replace(\"\\n\", \"\").split(\" \")\n",
-    "    annotation = np.array([int(x) - 1 for x in annotation])\n",
-    "    beat_indexed_annotation = np.array(dm.frontiers_to_segments(annotation))\n",
-    "    p, r, f = dm.compute_score_of_segmentation(beat_indexed_annotation, beat_indexed_segments, window_length = 0.5)\n",
-    "    all_res.append([p, r, f])\n",
-    "\n",
-    "results = np.array(all_res)\n",
-    "prec, rap, fmes = round(np.mean(results[:,0]),4), round(np.mean(results[:,1]),4), round(np.mean(results[:,2]),4)\n",
-    "print(\"Prec: {}, rap: {}, F measure: {}\".format(prec, rap, fmes))\n",
-    "plt.figure(figsize=(15,5))\n",
-    "plt.hist(distrib_segments, bins = range(max_size))\n",
-    "plt.xlabel(\"Segment's size (in nb of beats)\")\n",
-    "plt.title(\"Prec: {}, rap: {}, F measure: {}\".format(prec, rap, fmes))\n",
-    "plt.plot()"
-   ]
-  }
- ],
- "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.7.5"
-  },
-  "toc": {
-   "base_numbering": 1,
-   "nav_menu": {},
-   "number_sections": true,
-   "sideBar": true,
-   "skip_h1_title": false,
-   "title_cell": "Table of Contents",
-   "title_sidebar": "Contents",
-   "toc_cell": false,
-   "toc_position": {},
-   "toc_section_display": true,
-   "toc_window_display": false
-  },
-  "varInspector": {
-   "cols": {
-    "lenName": 16,
-    "lenType": 16,
-    "lenVar": 40
-   },
-   "kernels_config": {
-    "python": {
-     "delete_cmd_postfix": "",
-     "delete_cmd_prefix": "del ",
-     "library": "var_list.py",
-     "varRefreshCmd": "print(var_dic_list())"
-    },
-    "r": {
-     "delete_cmd_postfix": ") ",
-     "delete_cmd_prefix": "rm(",
-     "library": "var_list.r",
-     "varRefreshCmd": "cat(var_dic_list()) "
-    }
-   },
-   "types_to_exclude": [
-    "module",
-    "function",
-    "builtin_function_or_method",
-    "instance",
-    "_Feature"
-   ],
-   "window_display": false
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/Notebooks/Baseline - Louboutin - on song.ipynb b/Notebooks/Baseline - Louboutin - on song.ipynb
deleted file mode 100644
index cd1d5d82bc0b18b4c6d2d49ab818f9e49af5fa5e..0000000000000000000000000000000000000000
--- a/Notebooks/Baseline - Louboutin - on song.ipynb	
+++ /dev/null
@@ -1,309 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-04T12:49:08.668545Z",
-     "start_time": "2021-01-04T12:49:07.252923Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "import os\n",
-    "import time\n",
-    "\n",
-    "# Self-code imports\n",
-    "import polytopes.segmentation_algorithms as algos\n",
-    "from polytopes.model.note import Note\n",
-    "from polytopes.model.chord import Chord\n",
-    "import polytopes.polytopical_costs as pc\n",
-    "import polytopes.data_manipulation as dm\n",
-    "import polytopes.pattern_manip as pm\n",
-    "import polytopes.pattern_factory as pf\n",
-    "\n",
-    "#Generic imports\n",
-    "import numpy as np\n",
-    "import matplotlib.pyplot as plt\n",
-    "import pandas as pd\n",
-    "import math\n",
-    "import copy"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-04T12:49:08.674521Z",
-     "start_time": "2021-01-04T12:49:08.670531Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "# Hyperparams\n",
-    "max_size = 47\n",
-    "min_size = 8\n",
-    "positive_segment_size_penalty = 0\n",
-    "negative_segment_size_penalty = 0.125\n",
-    "target_size = 32\n",
-    "positive_penalty = 2.25\n",
-    "negative_penalty = 3"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# On a song"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-04T12:49:08.683498Z",
-     "start_time": "2021-01-04T12:49:08.676516Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "flow_file_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Annotations MIREX Quaero\\\\annotations_as_flow\\\\\"\n",
-    "song = \"001\"\n",
-    "bag_of_chords = []\n",
-    "file = open(flow_file_path + song + \".flow\", \"r\") \n",
-    "for chord in file.readlines():\n",
-    "    bag_of_chords.append(chord.split(\"\\n\")[0])"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-04T13:18:19.928387Z",
-     "start_time": "2021-01-04T12:49:08.685493Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "c:\\users\\amarmore\\desktop\\projects\\phd main projects\\on git\\code\\polytopes and relation\\polytopes\\baselines.py:643: UserWarning: No Polytope is available for this size of segment. Trying sequential cost instead.\n",
-      "  warnings.warn(\"No Polytope is available for this size of segment. Trying sequential cost instead.\")\n"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "My frontiers: [0, 24, 52, 84, 116, 148, 176, 196, 228, 256, 284, 316, 340, 368, 396, 428, 462]\n",
-      "Guichaoua's frontiers: [0, 20, 52, 84, 112, 144, 176, 192, 220, 252, 284, 292, 332, 364, 396, 428, 462]\n",
-      "Equality ? False\n",
-      "\n"
-     ]
-    }
-   ],
-   "source": [
-    "frontiers, costs = baselines.dynamic_minimization_louboutin_ppp(bag_of_chords)\n",
-    "\n",
-    "print(\"My frontiers: {}\".format(frontiers))\n",
-    "#print(\"Costs: {}\".format(costs))\n",
-    "\n",
-    "guichaoua_estimates = open(flow_file_path + song + \".frontiers_estimated\", \"r\")\n",
-    "tab = guichaoua_estimates.read().split(\" \")\n",
-    "guichaoua_frontiers = [int(i) - 1 for i in tab if i != \"\\n\"]\n",
-    "guichaoua_frontiers.append(frontiers[-1])\n",
-    "print(\"Guichaoua's frontiers: {}\".format(guichaoua_frontiers))\n",
-    "print(\"Equality ? {}\\n\".format(guichaoua_frontiers == frontiers))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 6,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-04T13:18:30.780002Z",
-     "start_time": "2021-01-04T13:18:19.934454Z"
-    },
-    "scrolled": false
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Cost: 17.0 at size 24\n",
-      "Cost: 15.5 at size 28\n",
-      "Cost: 18 at size 32\n",
-      "Cost: 15 at size 32\n",
-      "Cost: 23 at size 32\n",
-      "Cost: 15.5 at size 28\n",
-      "Cost: 21.75 at size 20\n",
-      "Cost: 17 at size 32\n",
-      "Cost: 15.5 at size 28\n",
-      "Cost: 15.5 at size 28\n",
-      "Cost: 27 at size 32\n",
-      "Cost: 26.0 at size 24\n",
-      "Cost: 15.5 at size 28\n",
-      "Cost: 15.5 at size 28\n",
-      "Cost: 23 at size 32\n",
-      "Cost: 20.25 at size 34\n",
-      "Ze sum:301.0\n"
-     ]
-    }
-   ],
-   "source": [
-    "the_sum = 0\n",
-    "for start, end in zip(frontiers[:-1], frontiers[1:]):\n",
-    "    segment = bag_of_chords[start:end]\n",
-    "    #print(segment)\n",
-    "    size = len(segment)\n",
-    "    bag_of_patterns = baselines.compute_ppp_for_size(size)\n",
-    "    the_min = math.inf\n",
-    "    best_pattern = None\n",
-    "    for a_pattern in bag_of_patterns:\n",
-    "        this_polytope_cost = math.inf\n",
-    "        for i in range(len(a_pattern[0])):\n",
-    "            this_ppp_cost = baselines.louboutin_cost(segment, a_pattern[0][i], a_pattern[3][i], a_pattern[4][i])\n",
-    "            if this_ppp_cost < this_polytope_cost:\n",
-    "                this_polytope_cost = this_ppp_cost\n",
-    "        cost = this_polytope_cost\n",
-    "        cost += baselines.irregularities_penalty_guichaoua(adding_code = a_pattern[1], deleting_code = a_pattern[2], positive_penalty = positive_penalty, negative_penalty = negative_penalty)\n",
-    "        if cost < the_min:\n",
-    "            best_pattern = a_pattern\n",
-    "            the_min = cost\n",
-    "    the_min += baselines.penalty_cost_guichaoua(size, target_size = 32, positive_segment_size_penalty = positive_segment_size_penalty, negative_segment_size_penalty = negative_segment_size_penalty)\n",
-    "    print(\"Cost: {} at size {}\".format(the_min, end-start))\n",
-    "    the_sum += the_min\n",
-    "print(\"Ze sum:{}\".format(the_sum))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 7,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-04T13:18:40.297340Z",
-     "start_time": "2021-01-04T13:18:30.785260Z"
-    }
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Cost: 8.75 at size 20\n",
-      "Cost: 31 at size 32\n",
-      "Cost: 18 at size 32\n",
-      "Cost: 15.5 at size 28\n",
-      "Cost: 10 at size 32\n",
-      "Cost: 31 at size 32\n",
-      "Cost: 18.25 at size 16\n",
-      "Cost: 15.5 at size 28\n",
-      "Cost: 10 at size 32\n",
-      "Cost: 31 at size 32\n",
-      "Cost: 13.0 at size 8\n",
-      "Cost: 35.25 at size 40\n",
-      "Cost: 12 at size 32\n",
-      "Cost: 31 at size 32\n",
-      "Cost: 23 at size 32\n",
-      "Cost: 20.25 at size 34\n",
-      "Ze sum:323.5\n"
-     ]
-    }
-   ],
-   "source": [
-    "the_sum = 0\n",
-    "for start, end in zip(guichaoua_frontiers[:-1], guichaoua_frontiers[1:]):\n",
-    "    segment = bag_of_chords[start:end]\n",
-    "    size = len(segment)\n",
-    "    bag_of_patterns = baselines.compute_ppp_for_size(size)\n",
-    "    the_min = math.inf\n",
-    "    best_pattern = None\n",
-    "    for a_pattern in bag_of_patterns:\n",
-    "        this_polytope_cost = math.inf\n",
-    "        for i in range(len(a_pattern[0])):\n",
-    "            this_ppp_cost = baselines.louboutin_cost(segment, a_pattern[0][i], a_pattern[3][i], a_pattern[4][i])\n",
-    "            if this_ppp_cost < this_polytope_cost:\n",
-    "                this_polytope_cost = this_ppp_cost\n",
-    "        cost = this_polytope_cost\n",
-    "        cost += baselines.irregularities_penalty_guichaoua(adding_code = a_pattern[1], deleting_code = a_pattern[2], positive_penalty = positive_penalty, negative_penalty = negative_penalty)\n",
-    "        if cost < the_min:\n",
-    "            best_pattern = a_pattern\n",
-    "            the_min = cost\n",
-    "    the_min += baselines.penalty_cost_guichaoua(size, target_size = 32, positive_segment_size_penalty = positive_segment_size_penalty, negative_segment_size_penalty = negative_segment_size_penalty)\n",
-    "    print(\"Cost: {} at size {}\".format(the_min, end-start))\n",
-    "    the_sum += the_min\n",
-    "print(\"Ze sum:{}\".format(the_sum))"
-   ]
-  }
- ],
- "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.7.5"
-  },
-  "toc": {
-   "base_numbering": 1,
-   "nav_menu": {},
-   "number_sections": true,
-   "sideBar": true,
-   "skip_h1_title": false,
-   "title_cell": "Table of Contents",
-   "title_sidebar": "Contents",
-   "toc_cell": false,
-   "toc_position": {},
-   "toc_section_display": true,
-   "toc_window_display": false
-  },
-  "varInspector": {
-   "cols": {
-    "lenName": 16,
-    "lenType": 16,
-    "lenVar": 40
-   },
-   "kernels_config": {
-    "python": {
-     "delete_cmd_postfix": "",
-     "delete_cmd_prefix": "del ",
-     "library": "var_list.py",
-     "varRefreshCmd": "print(var_dic_list())"
-    },
-    "r": {
-     "delete_cmd_postfix": ") ",
-     "delete_cmd_prefix": "rm(",
-     "library": "var_list.r",
-     "varRefreshCmd": "cat(var_dic_list()) "
-    }
-   },
-   "types_to_exclude": [
-    "module",
-    "function",
-    "builtin_function_or_method",
-    "instance",
-    "_Feature"
-   ],
-   "window_display": false
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/Notebooks/Cohen Marmoret - on song.ipynb b/Notebooks/Cohen Marmoret - on song.ipynb
deleted file mode 100644
index 041c5c77cde6568f6bc8561225395fa1989b1986..0000000000000000000000000000000000000000
--- a/Notebooks/Cohen Marmoret - on song.ipynb	
+++ /dev/null
@@ -1,373 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:39:46.629984Z",
-     "start_time": "2021-01-21T17:39:45.120964Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "import os\n",
-    "import time\n",
-    "\n",
-    "# Self-code imports\n",
-    "import polytopes.segmentation_algorithms as algos\n",
-    "from polytopes.model.note import Note\n",
-    "from polytopes.model.chord import Chord\n",
-    "import polytopes.polytopical_costs as pc\n",
-    "import polytopes.data_manipulation as dm\n",
-    "import polytopes.pattern_manip as pm\n",
-    "import polytopes.pattern_factory as pf\n",
-    "import polytopes.segmentation_helper as sh\n",
-    "\n",
-    "#Generic imports\n",
-    "import numpy as np\n",
-    "import matplotlib.pyplot as plt\n",
-    "import pandas as pd\n",
-    "import math\n",
-    "import copy"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:39:46.637927Z",
-     "start_time": "2021-01-21T17:39:46.631940Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "# Hyperparams\n",
-    "max_size = 47\n",
-    "min_size = 8\n",
-    "positive_segment_size_penalty = 0\n",
-    "negative_segment_size_penalty = 0#.125\n",
-    "target_size = 32\n",
-    "positive_penalty = 0#2.25\n",
-    "negative_penalty = 0#3"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# On a song"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:39:46.647900Z",
-     "start_time": "2021-01-21T17:39:46.640917Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "flow_file_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Annotations MIREX Quaero\\\\annotations_as_flow\\\\\"\n",
-    "song = \"001\"\n",
-    "bag_of_chords = []\n",
-    "file = open(flow_file_path + song + \".flow\", \"r\") \n",
-    "for chord in file.readlines():\n",
-    "    bag_of_chords.append(chord.split(\"\\n\")[0])"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:44:58.341425Z",
-     "start_time": "2021-01-21T17:39:46.649893Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "c:\\users\\amarmore\\desktop\\projects\\phd main projects\\on git\\code\\polytopes and relation\\polytopes\\segmentation_algorithms.py:239: UserWarning: No Polytope is available for this size of segment. Trying sequential cost instead.\n",
-      "  warnings.warn(\"No Polytope is available for this size of segment. Trying sequential cost instead.\")\n"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "My frontiers: [0, 24, 52, 84, 116, 148, 180, 192, 224, 256, 284, 315, 336, 368, 396, 428, 462]\n",
-      "Costs: 425\n",
-      "Guichaoua's frontiers: [0, 20, 52, 84, 112, 144, 176, 192, 220, 252, 284, 292, 332, 364, 396, 428, 462]\n",
-      "Equality ? False\n",
-      "\n"
-     ]
-    }
-   ],
-   "source": [
-    "frontiers, costs = algos.dynamic_minimization_cohen_marmoret(bag_of_chords)\n",
-    "\n",
-    "print(\"My frontiers: {}\".format(frontiers))\n",
-    "print(\"Costs: {}\".format(costs))\n",
-    "\n",
-    "guichaoua_estimates = open(flow_file_path + \"Guichaoua Estimates\\\\Experiments\\\\\" + song + \".frontiers_estimated\", \"r\")\n",
-    "tab = guichaoua_estimates.read().split(\" \")\n",
-    "guichaoua_frontiers = [int(i) - 1 for i in tab if i != \"\\n\"]\n",
-    "guichaoua_frontiers.append(frontiers[-1])\n",
-    "print(\"Guichaoua's frontiers: {}\".format(guichaoua_frontiers))\n",
-    "print(\"Equality ? {}\\n\".format(guichaoua_frontiers == frontiers))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 6,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:47:02.961257Z",
-     "start_time": "2021-01-21T17:46:56.267145Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "['Abm', 'Abm', 'Abm', 'Abm', 'F#', 'F#', 'F#', 'F#', 'E', 'E', 'E', 'E', 'F#', 'F#', 'F#', 'F#', 'F#', 'F#', 'F#', 'F#', 'Eb', 'Eb', 'Eb', 'Eb']\n",
-      "Sequence: [[[[['Abm', 'Abm'], ['Abm', 'Abm']], [['F#', 'F#'], ['F#', 'F#']]], [[['E', 'E'], ['E', 'E']], [['F#', 'F#'], ['F#', 'F#']]]], [[[['F#', 'F#'], ['F#', 'F#']], [['Eb', 'Eb'], ['Eb', 'Eb']]]]]\n",
-      "Cost: 16 at size 24\n",
-      "['Abm', 'Abm', 'Abm', 'Abm', 'E', 'E', 'E', 'E', 'B', 'B', 'B', 'B', 'Eb', 'Eb', 'Eb', 'Eb', 'Abm', 'Abm', 'Abm', 'Abm', 'E', 'E', 'E', 'E', 'F#', 'F#', 'Eb', 'Eb']\n",
-      "Sequence: [[[[['Abm', 'Abm'], ['Abm', 'Abm']], [['E', 'E'], ['E', 'E']]], [[['B', 'B'], ['B', 'B']], [['Eb', 'Eb'], ['Eb', 'Eb']]]], [[[['Abm', 'Abm'], ['Abm', 'Abm']], [['E', 'E'], ['E', 'E']]], [[['F#', 'F#']], [['Eb', 'Eb']]]]]\n",
-      "Cost: 23 at size 28\n",
-      "['Abm', 'Abm', 'Abm', 'Abm', 'F#', 'F#', 'F#', 'F#', 'C#', 'C#', 'C#', 'C#', 'E', 'E', 'F#', 'F#', 'Abm', 'Abm', 'Abm', 'Abm', 'F#', 'F#', 'F#', 'F#', 'C#', 'C#', 'C#', 'C#', 'E', 'E', 'F#', 'F#']\n",
-      "Sequence: [[[[['Abm', 'Abm'], ['Abm', 'Abm']], [['F#', 'F#'], ['F#', 'F#']]], [[['C#', 'C#'], [('C#', 'C#'), ('E', 'E')]], [['F#', 'F#']]]], [[[['Abm', 'Abm'], ['Abm', 'Abm']], [['F#', 'F#'], ['F#', 'F#']]], [[['C#', 'C#'], [('C#', 'C#'), ('E', 'E')]], [['F#', 'F#']]]]]\n",
-      "Cost: 20 at size 32\n",
-      "['Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'F', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Bb', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'F', 'Ab', 'Ab', 'Bb', 'Bb', 'Cm', 'Cm', 'Cm', 'Cm']\n",
-      "Sequence: [[[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'F']]], [[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'Bb']]]], [[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'F']]], [[['Ab', 'Ab'], ['Bb', 'Bb']], [[('Cm', 'Cm'), ('Cm', 'Cm')]]]]]\n",
-      "Cost: 14 at size 32\n",
-      "['Ab', 'Ab', 'Ab', 'Ab', 'Eb', 'Eb', 'Eb', 'Eb', 'G', 'G', 'G', 'G', 'Cm', 'Cm', 'Cm', 'Cm', 'Ab', 'Ab', 'Ab', 'Ab', 'Eb', 'Eb', 'Eb', 'Eb', 'G', 'G', 'G', 'G', 'Eb', 'Eb', 'Eb', 'Eb']\n",
-      "Sequence: [[[[['Ab', 'Ab'], ['Ab', 'Ab']], [['Eb', 'Eb'], ['Eb', 'Eb']]], [[['G', 'G'], ['G', 'G']], [['Cm', 'Cm'], [('Cm', 'Cm')]]]], [[[['Ab', 'Ab'], ['Ab', 'Ab']], [['Eb', 'Eb'], ['Eb', 'Eb']]], [[['G', 'G'], ['G', 'G']], [['Eb', 'Eb'], [('Eb', 'Eb')]]]]]\n",
-      "Cost: 25 at size 32\n",
-      "['Abm', 'Abm', 'Abm', 'Abm', 'E', 'E', 'E', 'E', 'B', 'B', 'B', 'B', 'Eb', 'Eb', 'Eb', 'Eb', 'Abm', 'Abm', 'Abm', 'Abm', 'E', 'E', 'E', 'E', 'F#', 'F#', 'Eb', 'Eb', 'Abm', 'Abm', 'Abm', 'Abm']\n",
-      "Sequence: [[[[['Abm', 'Abm'], ['Abm', 'Abm']], [['E', 'E'], ['E', 'E']]], [[['B', 'B'], ['B', 'B']], [['Eb', 'Eb'], [('Eb', 'Eb')]]]], [[[['Abm', 'Abm'], ['Abm', 'Abm']], [['E', 'E'], ['E', 'E']]], [[['F#', 'F#'], ['Eb', 'Eb']], [['Abm', 'Abm'], [('Abm', 'Abm')]]]]]\n",
-      "Cost: 29 at size 32\n",
-      "['F#', 'F#', 'F#', 'F#', 'C#', 'C#', 'C#', 'C#', 'E', 'E', 'F#', 'F#']\n",
-      "Sequence: [[[['F#', 'F#'], ['F#', 'F#']], [['C#', 'C#'], ['C#', 'C#']]], [[['E', 'E']], [['F#', 'F#']]]]\n",
-      "Cost: 9 at size 12\n",
-      "['Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'F', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Bb', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'F', 'Ab', 'Ab', 'Bb', 'Bb', 'Cm', 'Cm', 'Cm', 'Cm']\n",
-      "Sequence: [[[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'F']]], [[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'Bb']]]], [[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'F']]], [[['Ab', 'Ab'], ['Bb', 'Bb']], [[('Cm', 'Cm'), ('Cm', 'Cm')]]]]]\n",
-      "Cost: 14 at size 32\n",
-      "['Ab', 'Ab', 'Ab', 'Ab', 'Eb', 'Eb', 'Eb', 'Eb', 'G', 'G', 'G', 'G', 'Cm', 'Cm', 'Cm', 'Cm', 'Ab', 'Ab', 'Ab', 'Ab', 'Eb', 'Eb', 'Eb', 'Eb', 'G', 'G', 'G', 'G', 'Eb', 'Eb', 'Eb', 'Eb']\n",
-      "Sequence: [[[[['Ab', 'Ab'], ['Ab', 'Ab']], [['Eb', 'Eb'], ['Eb', 'Eb']]], [[['G', 'G'], ['G', 'G']], [['Cm', 'Cm'], [('Cm', 'Cm')]]]], [[[['Ab', 'Ab'], ['Ab', 'Ab']], [['Eb', 'Eb'], ['Eb', 'Eb']]], [[['G', 'G'], ['G', 'G']], [['Eb', 'Eb'], [('Eb', 'Eb')]]]]]\n",
-      "Cost: 25 at size 32\n",
-      "['Abm', 'Abm', 'Abm', 'Abm', 'E', 'E', 'E', 'E', 'B', 'B', 'B', 'B', 'Eb', 'Eb', 'Eb', 'Eb', 'Abm', 'Abm', 'Abm', 'Abm', 'E', 'E', 'E', 'E', 'F#', 'F#', 'Eb', 'Eb']\n",
-      "Sequence: [[[[['Abm', 'Abm'], ['Abm', 'Abm']], [['E', 'E'], ['E', 'E']]], [[['B', 'B'], ['B', 'B']], [['Eb', 'Eb'], ['Eb', 'Eb']]]], [[[['Abm', 'Abm'], ['Abm', 'Abm']], [['E', 'E'], ['E', 'E']]], [[['F#', 'F#']], [['Eb', 'Eb']]]]]\n",
-      "Cost: 23 at size 28\n",
-      "['Abm', 'Abm', 'Abm', 'Abm', 'Abm', 'Abm', 'E', 'Eb', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ab', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'C#', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm']\n",
-      "Sequence: [[[[['Abm', 'Abm'], ['Abm', 'Abm']], [['Abm', 'Abm'], ['E', 'Eb']]], [[['Ebm', 'Ebm'], ['Ebm', 'Ebm']], [['Ebm', 'Ebm'], ['Ebm', 'Ab']]]], [[[['Ebm', 'Ebm'], ['Ebm', 'Ebm']], [['Ebm', 'Ebm'], ['Ebm']]], [[['C#', 'Ebm'], ['Ebm', 'Ebm']], [['Ebm', 'Ebm'], [('Ebm', 'Ebm')]]]]]\n",
-      "Cost: 32 at size 31\n",
-      "['Ab', 'C#', 'C#', 'F#', 'F#', 'B', 'B', 'E', 'E', 'A', 'A', 'D', 'D', 'Eb', 'Eb', 'Eb', 'Eb', 'Eb', 'Eb', 'Eb', 'Eb']\n",
-      "Sequential cost\n",
-      "Ze sum:230\n"
-     ]
-    }
-   ],
-   "source": [
-    "the_sum = 0\n",
-    "for start, end in zip(frontiers[:-1], frontiers[1:]):\n",
-    "    segment = bag_of_chords[start:end]\n",
-    "    #print(segment)\n",
-    "    size = len(segment)\n",
-    "    print(segment)\n",
-    "    bag_of_patterns = sh.compute_patterns_with_antecedents_for_size(size)\n",
-    "    the_min = math.inf\n",
-    "    best_pattern = None\n",
-    "    for a_pattern in bag_of_patterns:\n",
-    "        this_polytope_cost = math.inf\n",
-    "        for i in range(len(a_pattern[0])):\n",
-    "            this_ppp_cost = pc.cohen_marmoret_cost(segment, a_pattern[0], a_pattern[3])\n",
-    "            if this_ppp_cost < this_polytope_cost:\n",
-    "                this_polytope_cost = this_ppp_cost\n",
-    "        cost = this_polytope_cost\n",
-    "        cost += pc.irregularities_penalty_guichaoua(adding_code = a_pattern[1], deleting_code = a_pattern[2], positive_penalty = positive_penalty, negative_penalty = negative_penalty)\n",
-    "        if cost < the_min:\n",
-    "            best_pattern = a_pattern\n",
-    "            the_min = cost\n",
-    "    the_min += sh.penalty_cost_guichaoua(size, target_size = 32, positive_segment_size_penalty = positive_segment_size_penalty, negative_segment_size_penalty = negative_segment_size_penalty)\n",
-    "    if bag_of_patterns == []:\n",
-    "        print(\"Sequential cost\")\n",
-    "        break\n",
-    "    print(\"Sequence: {}\".format(pf.apply_chords_on_pattern(best_pattern[0],segment)))\n",
-    "    print(\"Cost: {} at size {}\".format(the_min, end-start))\n",
-    "    the_sum += the_min\n",
-    "print(\"Ze sum:{}\".format(the_sum))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 8,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:48:21.919557Z",
-     "start_time": "2021-01-21T17:48:12.829436Z"
-    }
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "['Abm', 'Abm', 'Abm', 'Abm', 'F#', 'F#', 'F#', 'F#', 'E', 'E', 'E', 'E', 'F#', 'F#', 'F#', 'F#', 'F#', 'F#', 'F#', 'F#']\n",
-      "Sequence: [[[['Abm', 'Abm'], ['Abm', 'Abm']], [['F#', 'F#'], ['F#', 'F#']]], [[['E', 'E'], ['E', 'E']], [[('F#', 'F#'), ('F#', 'F#')], [('F#', 'F#'), ('F#', 'F#')]]]]\n",
-      "Cost: 7 at size 20\n",
-      "['Eb', 'Eb', 'Eb', 'Eb', 'Abm', 'Abm', 'Abm', 'Abm', 'E', 'E', 'E', 'E', 'B', 'B', 'B', 'B', 'Eb', 'Eb', 'Eb', 'Eb', 'Abm', 'Abm', 'Abm', 'Abm', 'E', 'E', 'E', 'E', 'F#', 'F#', 'Eb', 'Eb']\n",
-      "Sequence: [[[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['B', 'B'], [('B', 'B')]]]], [[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['F#', 'F#'], [('Eb', 'Eb')]]]]]\n",
-      "Cost: 39 at size 32\n",
-      "['Abm', 'Abm', 'Abm', 'Abm', 'F#', 'F#', 'F#', 'F#', 'C#', 'C#', 'C#', 'C#', 'E', 'E', 'F#', 'F#', 'Abm', 'Abm', 'Abm', 'Abm', 'F#', 'F#', 'F#', 'F#', 'C#', 'C#', 'C#', 'C#', 'E', 'E', 'F#', 'F#']\n",
-      "Sequence: [[[[['Abm', 'Abm'], ['Abm', 'Abm']], [['F#', 'F#'], ['F#', 'F#']]], [[['C#', 'C#'], [('C#', 'C#'), ('E', 'E')]], [['F#', 'F#']]]], [[[['Abm', 'Abm'], ['Abm', 'Abm']], [['F#', 'F#'], ['F#', 'F#']]], [[['C#', 'C#'], [('C#', 'C#'), ('E', 'E')]], [['F#', 'F#']]]]]\n",
-      "Cost: 20 at size 32\n",
-      "['Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'F', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Bb', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'F', 'Ab', 'Ab', 'Bb', 'Bb']\n",
-      "Sequence: [[[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'F']]], [[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'Bb']]]], [[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'F']]], [[['Ab', 'Ab'], ['Bb', 'Bb']]]]]\n",
-      "Cost: 13 at size 28\n",
-      "['Cm', 'Cm', 'Cm', 'Cm', 'Ab', 'Ab', 'Ab', 'Ab', 'Eb', 'Eb', 'Eb', 'Eb', 'G', 'G', 'G', 'G', 'Cm', 'Cm', 'Cm', 'Cm', 'Ab', 'Ab', 'Ab', 'Ab', 'Eb', 'Eb', 'Eb', 'Eb', 'G', 'G', 'G', 'G']\n",
-      "Sequence: [[[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Ab', 'Ab'], ['Ab', 'Ab']]], [[['Eb', 'Eb'], ['Eb', 'Eb']], [['G', 'G'], [('G', 'G')]]]], [[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Ab', 'Ab'], ['Ab', 'Ab']]], [[['Eb', 'Eb'], ['Eb', 'Eb']], [['G', 'G'], [('G', 'G')]]]]]\n",
-      "Cost: 12 at size 32\n",
-      "['Eb', 'Eb', 'Eb', 'Eb', 'Abm', 'Abm', 'Abm', 'Abm', 'E', 'E', 'E', 'E', 'B', 'B', 'B', 'B', 'Eb', 'Eb', 'Eb', 'Eb', 'Abm', 'Abm', 'Abm', 'Abm', 'E', 'E', 'E', 'E', 'F#', 'F#', 'Eb', 'Eb']\n",
-      "Sequence: [[[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['B', 'B'], [('B', 'B')]]]], [[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['F#', 'F#'], [('Eb', 'Eb')]]]]]\n",
-      "Cost: 39 at size 32\n",
-      "['Abm', 'Abm', 'Abm', 'Abm', 'F#', 'F#', 'F#', 'F#', 'C#', 'C#', 'C#', 'C#', 'E', 'E', 'F#', 'F#']\n",
-      "Sequence: [[[['Abm', 'Abm'], ['Abm', 'Abm']], [['F#', 'F#'], ['F#', 'F#']]], [[['C#', 'C#'], [('C#', 'C#'), ('E', 'E')]], [['F#', 'F#']]]]\n",
-      "Cost: 20 at size 16\n",
-      "['Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'F', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Bb', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'Cm', 'F', 'Ab', 'Ab', 'Bb', 'Bb']\n",
-      "Sequence: [[[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'F']]], [[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'Bb']]]], [[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'F']]], [[['Ab', 'Ab'], ['Bb', 'Bb']]]]]\n",
-      "Cost: 13 at size 28\n",
-      "['Cm', 'Cm', 'Cm', 'Cm', 'Ab', 'Ab', 'Ab', 'Ab', 'Eb', 'Eb', 'Eb', 'Eb', 'G', 'G', 'G', 'G', 'Cm', 'Cm', 'Cm', 'Cm', 'Ab', 'Ab', 'Ab', 'Ab', 'Eb', 'Eb', 'Eb', 'Eb', 'G', 'G', 'G', 'G']\n",
-      "Sequence: [[[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Ab', 'Ab'], ['Ab', 'Ab']]], [[['Eb', 'Eb'], ['Eb', 'Eb']], [['G', 'G'], [('G', 'G')]]]], [[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Ab', 'Ab'], ['Ab', 'Ab']]], [[['Eb', 'Eb'], ['Eb', 'Eb']], [['G', 'G'], [('G', 'G')]]]]]\n",
-      "Cost: 12 at size 32\n",
-      "['Eb', 'Eb', 'Eb', 'Eb', 'Abm', 'Abm', 'Abm', 'Abm', 'E', 'E', 'E', 'E', 'B', 'B', 'B', 'B', 'Eb', 'Eb', 'Eb', 'Eb', 'Abm', 'Abm', 'Abm', 'Abm', 'E', 'E', 'E', 'E', 'F#', 'F#', 'Eb', 'Eb']\n",
-      "Sequence: [[[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['B', 'B'], [('B', 'B')]]]], [[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['F#', 'F#'], [('Eb', 'Eb')]]]]]\n",
-      "Cost: 39 at size 32\n",
-      "['Abm', 'Abm', 'Abm', 'Abm', 'Abm', 'Abm', 'E', 'Eb']\n",
-      "Sequence: [[['Abm', 'Abm'], ['Abm', 'Abm']], [['Abm', ('Abm', 'E')], ['Eb']]]\n",
-      "Cost: 11 at size 8\n",
-      "['Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ab', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'C#', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ebm', 'Ab', 'C#', 'C#', 'F#', 'F#', 'B', 'B', 'E', 'E', 'A', 'A', 'D', 'D', 'Eb', 'Eb', 'Eb', 'Eb']\n",
-      "Sequence: [[[[['Ebm', 'Ebm'], ['Ebm', 'Ebm']], [['Ebm', 'Ebm'], ['Ebm', 'Ab']]], [[['Ebm', 'Ebm'], ['Ebm', 'Ebm']], [['Ebm', 'Ebm'], ['Ebm', 'C#']]]], [[[['Ebm', 'Ebm'], ['Ebm', 'Ebm']], [['Ebm', 'Ebm'], ['Ebm', 'Ab']]], [[[('C#', 'C#'), ('F#', 'F#')], [('B', 'B'), ('E', 'E')]], [[('A', 'A'), ('D', 'D')], [('Eb', 'Eb'), ('Eb', 'Eb')]]]]]\n",
-      "Cost: 41 at size 40\n",
-      "['Eb', 'Eb', 'Eb', 'Eb', 'Ab', 'Ab', 'Ab', 'Ab', 'Eb', 'Eb', 'Eb', 'Eb', 'G', 'G', 'G', 'G', 'Cm', 'Cm', 'Cm', 'Cm', 'Ab', 'Ab', 'Ab', 'Ab', 'Eb', 'Eb', 'Eb', 'Eb', 'G', 'G', 'G', 'G']\n",
-      "Sequence: [[[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Ab', 'Ab'], ['Ab', 'Ab']]], [[['Eb', 'Eb'], [('Eb', 'Eb')]], [['G', 'G'], [('G', 'G')]]]], [[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Ab', 'Ab'], ['Ab', 'Ab']]], [[['Eb', 'Eb'], [('Eb', 'Eb')]], [['G', 'G'], [('G', 'G')]]]]]\n",
-      "Cost: 18 at size 32\n",
-      "['Eb', 'Eb', 'Eb', 'Eb', 'Abm', 'Abm', 'Abm', 'Abm', 'E', 'E', 'E', 'E', 'B', 'B', 'B', 'B', 'Eb', 'Eb', 'Eb', 'Eb', 'Abm', 'Abm', 'Abm', 'Abm', 'E', 'E', 'E', 'E', 'F#', 'F#', 'Eb', 'Eb']\n",
-      "Sequence: [[[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['B', 'B'], [('B', 'B')]]]], [[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['F#', 'F#'], [('Eb', 'Eb')]]]]]\n",
-      "Cost: 39 at size 32\n",
-      "['Abm', 'Abm', 'Abm', 'Abm', 'E', 'E', 'E', 'E', 'B', 'B', 'B', 'B', 'Eb', 'Eb', 'Eb', 'Eb', 'Abm', 'Abm', 'Abm', 'Abm', 'E', 'E', 'E', 'E', 'F#', 'F#', 'Eb', 'Eb', 'Abm', 'Abm', 'Abm', 'Abm']\n",
-      "Sequence: [[[[['Abm', 'Abm'], ['Abm', 'Abm']], [['E', 'E'], ['E', 'E']]], [[['B', 'B'], ['B', 'B']], [['Eb', 'Eb'], [('Eb', 'Eb')]]]], [[[['Abm', 'Abm'], ['Abm', 'Abm']], [['E', 'E'], ['E', 'E']]], [[['F#', 'F#'], ['Eb', 'Eb']], [['Abm', 'Abm'], [('Abm', 'Abm')]]]]]\n",
-      "Cost: 29 at size 32\n",
-      "['F#', 'F#', 'F#', 'F#', 'C#', 'C#', 'C#', 'C#', 'E', 'E', 'F#', 'F#', 'Abm', 'Abm', 'Abm', 'Abm', 'F#', 'F#', 'F#', 'F#', 'C#', 'C#', 'C#', 'C#', 'E', 'E', 'F#', 'F#', 'F#', 'F#', 'Abm', 'Abm', 'Abm', 'Abm']\n",
-      "Sequence: [[[[['F#', 'F#'], ['F#', 'F#']], [['C#', 'C#'], ['C#', 'C#']]], [[['E', 'E'], ['F#', 'F#']], [['Abm', 'Abm'], ['Abm', 'Abm']]]], [[[['F#', 'F#'], ['F#', 'F#']], [['C#', 'C#'], ['C#', 'C#']]], [[['E', 'E'], [('F#', 'F#'), ('F#', 'F#')]], [['Abm', 'Abm'], [('Abm', 'Abm')]]]]]\n",
-      "Cost: 17 at size 34\n",
-      "Ze sum:369\n"
-     ]
-    }
-   ],
-   "source": [
-    "the_sum = 0\n",
-    "for start, end in zip(guichaoua_frontiers[:-1], guichaoua_frontiers[1:]):\n",
-    "    segment = bag_of_chords[start:end]\n",
-    "    #print(segment)\n",
-    "    size = len(segment)\n",
-    "    print(segment)\n",
-    "    bag_of_patterns = sh.compute_patterns_with_antecedents_for_size(size)\n",
-    "    the_min = math.inf\n",
-    "    best_pattern = None\n",
-    "    for a_pattern in bag_of_patterns:\n",
-    "        this_polytope_cost = math.inf\n",
-    "        for i in range(len(a_pattern[0])):\n",
-    "            this_ppp_cost = pc.cohen_marmoret_cost(segment, a_pattern[0], a_pattern[3])\n",
-    "            if this_ppp_cost < this_polytope_cost:\n",
-    "                this_polytope_cost = this_ppp_cost\n",
-    "        cost = this_polytope_cost\n",
-    "        cost += pc.irregularities_penalty_guichaoua(adding_code = a_pattern[1], deleting_code = a_pattern[2], positive_penalty = positive_penalty, negative_penalty = negative_penalty)\n",
-    "        if cost < the_min:\n",
-    "            best_pattern = a_pattern\n",
-    "            the_min = cost\n",
-    "    the_min += sh.penalty_cost_guichaoua(size, target_size = 32, positive_segment_size_penalty = positive_segment_size_penalty, negative_segment_size_penalty = negative_segment_size_penalty)\n",
-    "    if bag_of_patterns == []:\n",
-    "        print(\"Sequential cost\")\n",
-    "        break\n",
-    "    print(\"Sequence: {}\".format(pf.apply_chords_on_pattern(best_pattern[0],segment)))\n",
-    "    print(\"Cost: {} at size {}\".format(the_min, end-start))\n",
-    "    the_sum += the_min\n",
-    "print(\"Ze sum:{}\".format(the_sum))"
-   ]
-  }
- ],
- "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.7.5"
-  },
-  "toc": {
-   "base_numbering": 1,
-   "nav_menu": {},
-   "number_sections": true,
-   "sideBar": true,
-   "skip_h1_title": false,
-   "title_cell": "Table of Contents",
-   "title_sidebar": "Contents",
-   "toc_cell": false,
-   "toc_position": {},
-   "toc_section_display": true,
-   "toc_window_display": false
-  },
-  "varInspector": {
-   "cols": {
-    "lenName": 16,
-    "lenType": 16,
-    "lenVar": 40
-   },
-   "kernels_config": {
-    "python": {
-     "delete_cmd_postfix": "",
-     "delete_cmd_prefix": "del ",
-     "library": "var_list.py",
-     "varRefreshCmd": "print(var_dic_list())"
-    },
-    "r": {
-     "delete_cmd_postfix": ") ",
-     "delete_cmd_prefix": "rm(",
-     "library": "var_list.r",
-     "varRefreshCmd": "cat(var_dic_list()) "
-    }
-   },
-   "types_to_exclude": [
-    "module",
-    "function",
-    "builtin_function_or_method",
-    "instance",
-    "_Feature"
-   ],
-   "window_display": false
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/Notebooks/Comparing Louboutin & Guichaoua.ipynb b/Notebooks/Comparing Louboutin & Guichaoua.ipynb
deleted file mode 100644
index 3f78b92168365e00afe0a71715484e7ed94c4543..0000000000000000000000000000000000000000
--- a/Notebooks/Comparing Louboutin & Guichaoua.ipynb	
+++ /dev/null
@@ -1,583 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Disclaimer: for fair comparison, penalties MUST be always null, to check everytime it is launched."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-22T17:44:55.613067Z",
-     "start_time": "2021-01-22T17:44:54.268957Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "import os\n",
-    "import time\n",
-    "\n",
-    "# Self-code imports\n",
-    "import polytopes.segmentation_algorithms as algos\n",
-    "from polytopes.model.note import Note\n",
-    "from polytopes.model.chord import Chord\n",
-    "import polytopes.polytopical_costs as pc\n",
-    "import polytopes.data_manipulation as dm\n",
-    "import polytopes.segmentation_helper as sh\n",
-    "import polytopes.pattern_manip as pm\n",
-    "import polytopes.pattern_factory as pf\n",
-    "\n",
-    "#Generic imports\n",
-    "import numpy as np\n",
-    "import matplotlib.pyplot as plt\n",
-    "import pandas as pd\n",
-    "import math\n",
-    "import copy"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-22T17:44:55.624850Z",
-     "start_time": "2021-01-22T17:44:55.614876Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "database_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Projects\\\\RWC_annotations\\\\final_bimbot_al\\\\\"\n",
-    "annotations_folder_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Audio samples\\\\RWC Pop\\\\annotations\\\\final_bimbot\\\\\"\n",
-    "persisted_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\data_persisted\"\n",
-    "\n",
-    "max_size = 42\n",
-    "\n",
-    "manual = []\n",
-    "\n",
-    "for file in os.listdir(database_path):\n",
-    "    bag_of_words = file.split(\".\")\n",
-    "    if bag_of_words[-1] == \"seq\":\n",
-    "        if bag_of_words[-3] == \"manual\":\n",
-    "            manual.append(file)\n",
-    "\n",
-    "CURR_DIR = os.path.dirname(os.path.realpath(\"__file__\"))\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-22T17:44:55.633827Z",
-     "start_time": "2021-01-22T17:44:55.627843Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "def print_res_for_songs_range(all_res, context = \"\"):\n",
-    "    results = np.array(all_res)\n",
-    "    prec, rap, fmes = round(np.mean(results[:,0]),4), round(np.mean(results[:,1]),4), round(np.mean(results[:,2]),4)\n",
-    "    print(\"Context: {}, prec: {}, rap: {}, F measure: {}\".format(context, prec, rap, fmes))"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Marmoret"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Marmoret-Cohen cost"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-22T22:25:01.881581Z",
-     "start_time": "2021-01-22T17:44:55.635823Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "c:\\users\\amarmore\\desktop\\projects\\phd main projects\\on git\\code\\polytopes and relation\\polytopes\\segmentation_algorithms.py:239: UserWarning: No Polytope is available for this size of segment. Trying sequential cost instead.\n",
-      "  warnings.warn(\"No Polytope is available for this size of segment. Trying sequential cost instead.\")\n"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Context: Zero Tolerance, prec: 0.3721, rap: 0.5916, F measure: 0.4505\n",
-      "Context: Three Tolerance, prec: 0.4198, rap: 0.6688, F measure: 0.5086\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "[]"
-      ]
-     },
-     "execution_count": 4,
-     "metadata": {},
-     "output_type": "execute_result"
-    },
-    {
-     "data": {
-      "image/png": "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\n",
-      "text/plain": [
-       "<Figure size 1080x360 with 1 Axes>"
-      ]
-     },
-     "metadata": {
-      "needs_background": "light"
-     },
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "mc_all_res_zero_tol = []\n",
-    "mc_all_res_three_tol = []\n",
-    "mc_all_frontiers = []\n",
-    "mc_distrib_segments = []\n",
-    "\n",
-    "for song in manual:\n",
-    "    song_number = song.split(\".\")[0]\n",
-    "\n",
-    "    bag_of_chords = dm.flowify_song(database_path + song)\n",
-    "\n",
-    "    try:\n",
-    "        frontiers = np.load(\"{}\\\\persisted_content\\\\estimated_frontiers\\\\marmoret_cohen_song{}_penalties{}_maxsize{}.npy\".format(CURR_DIR, song_number, (0,0), max_size), allow_pickle = True)\n",
-    "    except FileNotFoundError:\n",
-    "        frontiers, cost = algos.dynamic_minimization_cohen_marmoret(bag_of_chords, segment_size_penalty = 0, min_size = 8, max_size = max_size, target_size = 32, irregularity_penalty = 0)\n",
-    "        fro = np.array(frontiers, dtype=object)\n",
-    "        np.save(\"{}\\\\persisted_content\\\\estimated_frontiers\\\\marmoret_cohen_song{}_penalties{}_maxsize{}\".format(CURR_DIR, song_number, (0,0), max_size), fro)\n",
-    "\n",
-    "    mc_all_frontiers.append(frontiers)\n",
-    "    \n",
-    "    for fst, snd in zip(frontiers[:-1], frontiers[1:]):\n",
-    "        mc_distrib_segments.append(snd - fst)\n",
-    "\n",
-    "    #Scores, computed on the beat annotation\n",
-    "    beat_indexed_segments = dm.frontiers_to_segments(frontiers)\n",
-    "\n",
-    "    annot_name = \"{:03d}.manual.seg\".format(int(song_number))\n",
-    "    annotation_file = open(annotations_folder_path + annot_name,'r')\n",
-    "    annotation = annotation_file.read().replace(\"\\n\", \"\").split(\" \")\n",
-    "    annotation = np.array([int(x) - 1 for x in annotation])\n",
-    "    beat_indexed_annotation = np.array(dm.frontiers_to_segments(annotation))\n",
-    "    \n",
-    "    p,r,f = dm.compute_score_of_segmentation(beat_indexed_annotation, beat_indexed_segments, \n",
-    "                                                               window_length = 0.2)\n",
-    "    mc_all_res_zero_tol.append([p,r,f])\n",
-    "    \n",
-    "    p_3,r_3,f_3 = dm.compute_score_of_segmentation(beat_indexed_annotation, beat_indexed_segments, \n",
-    "                                                                window_length = 3)\n",
-    "    mc_all_res_three_tol.append([p_3,r_3,f_3])\n",
-    "\n",
-    "print_res_for_songs_range(mc_all_res_zero_tol, context = \"Zero Tolerance\")\n",
-    "print_res_for_songs_range(mc_all_res_three_tol, context = \"Three Tolerance\")\n",
-    "plt.figure(figsize=(15,5))\n",
-    "plt.hist(mc_distrib_segments, bins = range(max_size))\n",
-    "plt.xlabel(\"Segment's size (in nb of beats)\")\n",
-    "#plt.title(\"Prec: {}, rap: {}, F measure: {}\".format(prec, rap, fmes))\n",
-    "plt.plot()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-22T22:25:02.095017Z",
-     "start_time": "2021-01-22T22:25:01.883574Z"
-    }
-   },
-   "outputs": [
-    {
-     "ename": "NameError",
-     "evalue": "name 'stop' is not defined",
-     "output_type": "error",
-     "traceback": [
-      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
-      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
-      "\u001b[1;32m<ipython-input-5-4f76a9dad686>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mstop\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
-      "\u001b[1;31mNameError\u001b[0m: name 'stop' is not defined"
-     ]
-    }
-   ],
-   "source": [
-    "stop"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Louboutaoua cost"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-22T22:25:02.107974Z",
-     "start_time": "2021-01-22T17:44:54.272Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "m_all_res_zero_tol = []\n",
-    "m_all_res_three_tol = []\n",
-    "m_all_frontiers = []\n",
-    "m_distrib_segments = []\n",
-    "m_cost_sum = 0\n",
-    "m_cost_nb = 0\n",
-    "\n",
-    "for song in manual:\n",
-    "    song_number = song.split(\".\")[0]\n",
-    "\n",
-    "    bag_of_chords = dm.flowify_song(database_path + song)\n",
-    "\n",
-    "    try:\n",
-    "        frontiers = np.load(\"{}\\\\persisted_content\\\\estimated_frontiers\\\\marmoret_louboutaoua_song{}_penalties{}_maxsize{}.npy\".format(CURR_DIR, song_number, (0,0), max_size), allow_pickle = True)\n",
-    "    except FileNotFoundError:\n",
-    "        frontiers, cost = algos.dynamic_minimization_louboutaoua(bag_of_chords, segment_size_penalty = 0, min_size = 8, max_size = max_size, target_size = 32, irregularity_penalty = 0)\n",
-    "        fro = np.array(frontiers, dtype=object)\n",
-    "        np.save(\"{}\\\\persisted_content\\\\estimated_frontiers\\\\marmoret_louboutaoua_song{}_penalties{}_maxsize{}\".format(CURR_DIR, song_number, (0,0), max_size), fro)\n",
-    "\n",
-    "    m_all_frontiers.append(frontiers)\n",
-    "    #m_cost_sum += cost\n",
-    "    #m_cost_nb += len(frontiers) - 1\n",
-    "    \n",
-    "    for fst, snd in zip(frontiers[:-1], frontiers[1:]):\n",
-    "        m_distrib_segments.append(snd - fst)\n",
-    "\n",
-    "    #Scores, computed on the beat annotation\n",
-    "    beat_indexed_segments = dm.frontiers_to_segments(frontiers)\n",
-    "\n",
-    "    annot_name = \"{:03d}.manual.seg\".format(int(song_number))\n",
-    "    annotation_file = open(annotations_folder_path + annot_name,'r')\n",
-    "    annotation = annotation_file.read().replace(\"\\n\", \"\").split(\" \")\n",
-    "    annotation = np.array([int(x) - 1 for x in annotation])\n",
-    "    beat_indexed_annotation = np.array(dm.frontiers_to_segments(annotation))\n",
-    "    \n",
-    "    p,r,f = dm.compute_score_of_segmentation(beat_indexed_annotation, beat_indexed_segments, \n",
-    "                                                               window_length = 0.2)\n",
-    "    m_all_res_zero_tol.append([p,r,f])\n",
-    "    \n",
-    "    p_3,r_3,f_3 = dm.compute_score_of_segmentation(beat_indexed_annotation, beat_indexed_segments, \n",
-    "                                                                window_length = 3)\n",
-    "    m_all_res_three_tol.append([p_3,r_3,f_3])\n",
-    "\n",
-    "print_res_for_songs_range(m_all_res_zero_tol, context = \"Zero Tolerance\")\n",
-    "print_res_for_songs_range(m_all_res_three_tol, context = \"Three Tolerance\")\n",
-    "#print(\"Averaged cost for a polytope: {}\".format(m_cost_sum/m_cost_nb))\n",
-    "plt.figure(figsize=(15,5))\n",
-    "plt.hist(m_distrib_segments, bins = range(max_size))\n",
-    "plt.xlabel(\"Segment's size (in nb of beats)\")\n",
-    "#plt.title(\"Prec: {}, rap: {}, F measure: {}\".format(prec, rap, fmes))\n",
-    "plt.plot()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Guichaoua"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Local"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-22T22:25:02.110967Z",
-     "start_time": "2021-01-22T17:44:54.274Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "g_all_res_zero_tol = []\n",
-    "g_all_res_three_tol = []\n",
-    "g_all_frontiers = []\n",
-    "g_distrib_segments = []\n",
-    "\n",
-    "for song in manual:\n",
-    "    song_number = song.split(\".\")[0]\n",
-    "\n",
-    "    bag_of_chords = dm.flowify_song(database_path + song)\n",
-    "    try:\n",
-    "        frontiers = np.load(\"{}\\\\persisted_content\\\\estimated_frontiers\\\\guichaoua_song{}_penalties{}_maxsize{}.npy\".format(CURR_DIR, song_number, (0,0), max_size), allow_pickle = True)\n",
-    "    except FileNotFoundError:\n",
-    "        frontiers, cost = algos.dynamic_minimization_guichaoua(bag_of_chords, \n",
-    "                                                                   positive_segment_size_penalty = 0, negative_segment_size_penalty = 0,\n",
-    "                                                                   min_size = 8, max_size = max_size, target_size = 32, \n",
-    "                                                                   positive_penalty = 0, negative_penalty = 0,\n",
-    "                                                                   global_antecedents = False)\n",
-    "        fro = np.array(frontiers, dtype=object)\n",
-    "        np.save(\"{}\\\\persisted_content\\\\estimated_frontiers\\\\guichaoua_song{}_penalties{}_maxsize{}\".format(CURR_DIR, song_number, (0,0), max_size), fro)\n",
-    "\n",
-    "    g_all_frontiers.append(frontiers)\n",
-    "    \n",
-    "    for fst, snd in zip(frontiers[:-1], frontiers[1:]):\n",
-    "        g_distrib_segments.append(snd - fst)\n",
-    "\n",
-    "    #Scores, computed on the beat annotation\n",
-    "    beat_indexed_segments = dm.frontiers_to_segments(frontiers)\n",
-    "\n",
-    "    annot_name = \"{:03d}.manual.seg\".format(int(song_number))\n",
-    "    annotation_file = open(annotations_folder_path + annot_name,'r')\n",
-    "    annotation = annotation_file.read().replace(\"\\n\", \"\").split(\" \")\n",
-    "    annotation = np.array([int(x) - 1 for x in annotation])\n",
-    "    beat_indexed_annotation = np.array(dm.frontiers_to_segments(annotation))\n",
-    "    \n",
-    "    p,r,f = dm.compute_score_of_segmentation(beat_indexed_annotation, beat_indexed_segments, \n",
-    "                                                               window_length = 0.2)\n",
-    "    g_all_res_zero_tol.append([p,r,f])\n",
-    "    \n",
-    "    p_3,r_3,f_3 = dm.compute_score_of_segmentation(beat_indexed_annotation, beat_indexed_segments, \n",
-    "                                                                window_length = 3)\n",
-    "    g_all_res_three_tol.append([p_3,r_3,f_3])\n",
-    "\n",
-    "print_res_for_songs_range(g_all_res_zero_tol, context = \"Zero Tolerance\")\n",
-    "print_res_for_songs_range(g_all_res_three_tol, context = \"Three Tolerance\")\n",
-    "plt.figure(figsize=(15,5))\n",
-    "plt.hist(g_distrib_segments, bins = range(max_size))\n",
-    "plt.xlabel(\"Segment's size (in nb of beats)\")\n",
-    "#plt.title(\"Prec: {}, rap: {}, F measure: {}\".format(prec, rap, fmes))\n",
-    "plt.plot()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Global"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-22T22:25:02.112962Z",
-     "start_time": "2021-01-22T17:44:54.278Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "g_all_res_zero_tol = []\n",
-    "g_all_res_three_tol = []\n",
-    "g_all_frontiers = []\n",
-    "g_distrib_segments = []\n",
-    "#g_cost_sum = 0\n",
-    "#g_cost_nb = 0\n",
-    "\n",
-    "for song in manual:\n",
-    "    song_number = song.split(\".\")[0]\n",
-    "\n",
-    "    bag_of_chords = dm.flowify_song(database_path + song)\n",
-    "    try:\n",
-    "        frontiers = np.load(\"{}\\\\persisted_content\\\\estimated_frontiers\\\\guichaoua_global_song{}_penalties{}_maxsize{}.npy\".format(CURR_DIR, song_number, (0,0), max_size), allow_pickle = True)\n",
-    "    except FileNotFoundError:\n",
-    "        frontiers, cost = algos.dynamic_minimization_guichaoua(bag_of_chords,\n",
-    "                                                                   positive_segment_size_penalty = 0, negative_segment_size_penalty = 0,\n",
-    "                                                                   min_size = 8, max_size = max_size, target_size = 32, \n",
-    "                                                                   positive_penalty = 0, negative_penalty = 0,\n",
-    "                                                                   global_antecedents = True)\n",
-    "        fro = np.array(frontiers, dtype=object)\n",
-    "        np.save(\"{}\\\\persisted_content\\\\estimated_frontiers\\\\guichaoua_global_song{}_penalties{}_maxsize{}\".format(CURR_DIR, song_number, (0,0), max_size), fro)\n",
-    "\n",
-    "    g_all_frontiers.append(frontiers)\n",
-    "    #g_cost_sum += cost\n",
-    "    #g_cost_nb += len(frontiers) - 1\n",
-    "    \n",
-    "    for fst, snd in zip(frontiers[:-1], frontiers[1:]):\n",
-    "        g_distrib_segments.append(snd - fst)\n",
-    "\n",
-    "    #Scores, computed on the beat annotation\n",
-    "    beat_indexed_segments = dm.frontiers_to_segments(frontiers)\n",
-    "\n",
-    "    annot_name = \"{:03d}.manual.seg\".format(int(song_number))\n",
-    "    annotation_file = open(annotations_folder_path + annot_name,'r')\n",
-    "    annotation = annotation_file.read().replace(\"\\n\", \"\").split(\" \")\n",
-    "    annotation = np.array([int(x) - 1 for x in annotation])\n",
-    "    beat_indexed_annotation = np.array(dm.frontiers_to_segments(annotation))\n",
-    "    \n",
-    "    p,r,f = dm.compute_score_of_segmentation(beat_indexed_annotation, beat_indexed_segments, \n",
-    "                                                               window_length = 0.2)\n",
-    "    g_all_res_zero_tol.append([p,r,f])\n",
-    "    \n",
-    "    p_3,r_3,f_3 = dm.compute_score_of_segmentation(beat_indexed_annotation, beat_indexed_segments, \n",
-    "                                                                window_length = 3)\n",
-    "    g_all_res_three_tol.append([p_3,r_3,f_3])\n",
-    "\n",
-    "print_res_for_songs_range(g_all_res_zero_tol, context = \"Zero Tolerance\")\n",
-    "print_res_for_songs_range(g_all_res_three_tol, context = \"Three Tolerance\")\n",
-    "#print(\"Averaged cost for a polytope: {}\".format(g_cost_sum/g_cost_nb))\n",
-    "plt.figure(figsize=(15,5))\n",
-    "plt.hist(g_distrib_segments, bins = range(max_size))\n",
-    "plt.xlabel(\"Segment's size (in nb of beats)\")\n",
-    "#plt.title(\"Prec: {}, rap: {}, F measure: {}\".format(prec, rap, fmes))\n",
-    "plt.plot()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Louboutin"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-22T22:25:02.114955Z",
-     "start_time": "2021-01-22T17:44:54.281Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "l_all_res_zero_tol = []\n",
-    "l_all_res_three_tol = []\n",
-    "l_all_frontiers = []\n",
-    "l_distrib_segments = []\n",
-    "l_cost_sum = 0\n",
-    "l_cost_nb = 0\n",
-    "\n",
-    "for song in manual:\n",
-    "    song_number = song.split(\".\")[0]\n",
-    "\n",
-    "    bag_of_chords = dm.flowify_song(database_path + song)\n",
-    "\n",
-    "    try:\n",
-    "        fro = np.load(\"{}\\\\persisted_content\\\\estimated_frontiers\\\\louboutin_song{}_penalties{}_maxsize{}.npy\".format(CURR_DIR, song_number, (0,0), max_size), allow_pickle = True)\n",
-    "    except FileNotFoundError:\n",
-    "        frontiers, cost = algos.dynamic_minimization_louboutin(bag_of_chords, segment_size_penalty = 0, min_size = 8, max_size = max_size, target_size = 32, irregularity_penalty = 0)\n",
-    "        fro = np.array(frontiers, dtype=object)\n",
-    "        np.save(\"{}\\\\persisted_content\\\\estimated_frontiers\\\\louboutin_song{}_penalties{}_maxsize{}\".format(CURR_DIR, song_number, (0,0), max_size), fro)\n",
-    "\n",
-    "    l_cost_sum += cost\n",
-    "    l_cost_nb += len(frontiers) - 1\n",
-    "\n",
-    "    l_all_frontiers.append(frontiers)\n",
-    "    \n",
-    "    for fst, snd in zip(frontiers[:-1], frontiers[1:]):\n",
-    "        l_distrib_segments.append(snd - fst)\n",
-    "\n",
-    "    #Scores, computed on the beat annotation\n",
-    "    beat_indexed_segments = dm.frontiers_to_segments(frontiers)\n",
-    "\n",
-    "    annot_name = \"{:03d}.manual.seg\".format(int(song_number))\n",
-    "    annotation_file = open(annotations_folder_path + annot_name,'r')\n",
-    "    annotation = annotation_file.read().replace(\"\\n\", \"\").split(\" \")\n",
-    "    annotation = np.array([int(x) - 1 for x in annotation])\n",
-    "    beat_indexed_annotation = np.array(dm.frontiers_to_segments(annotation))\n",
-    "    \n",
-    "    p,r,f = dm.compute_score_of_segmentation(beat_indexed_annotation, beat_indexed_segments, \n",
-    "                                                               window_length = 0.2)\n",
-    "    l_all_res_zero_tol.append([p,r,f])\n",
-    "    \n",
-    "    p_3,r_3,f_3 = dm.compute_score_of_segmentation(beat_indexed_annotation, beat_indexed_segments, \n",
-    "                                                                window_length = 3)\n",
-    "    l_all_res_three_tol.append([p_3,r_3,f_3])\n",
-    "\n",
-    "print_res_for_songs_range(l_all_res_zero_tol, context = \"Zero Tolerance\")\n",
-    "print_res_for_songs_range(l_all_res_three_tol, context = \"Three Tolerance\")\n",
-    "print(\"Averaged cost for a polytope: {}\".format(l_cost_sum/l_cost_nb))\n",
-    "plt.figure(figsize=(15,5))\n",
-    "plt.hist(l_distrib_segments, bins = range(max_size))\n",
-    "plt.xlabel(\"Segment's size (in nb of beats)\")\n",
-    "#plt.title(\"Prec: {}, rap: {}, F measure: {}\".format(prec, rap, fmes))\n",
-    "plt.plot()"
-   ]
-  }
- ],
- "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.7.5"
-  },
-  "toc": {
-   "base_numbering": 1,
-   "nav_menu": {},
-   "number_sections": true,
-   "sideBar": true,
-   "skip_h1_title": false,
-   "title_cell": "Table of Contents",
-   "title_sidebar": "Contents",
-   "toc_cell": false,
-   "toc_position": {},
-   "toc_section_display": true,
-   "toc_window_display": false
-  },
-  "varInspector": {
-   "cols": {
-    "lenName": 16,
-    "lenType": 16,
-    "lenVar": 40
-   },
-   "kernels_config": {
-    "python": {
-     "delete_cmd_postfix": "",
-     "delete_cmd_prefix": "del ",
-     "library": "var_list.py",
-     "varRefreshCmd": "print(var_dic_list())"
-    },
-    "r": {
-     "delete_cmd_postfix": ") ",
-     "delete_cmd_prefix": "rm(",
-     "library": "var_list.r",
-     "varRefreshCmd": "cat(var_dic_list()) "
-    }
-   },
-   "types_to_exclude": [
-    "module",
-    "function",
-    "builtin_function_or_method",
-    "instance",
-    "_Feature"
-   ],
-   "window_display": false
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/Notebooks/Comparing direct and global.ipynb b/Notebooks/Comparing direct and global.ipynb
deleted file mode 100644
index a78fa8985ebcc6e7c577b39bb8c5119e7b2fa6e3..0000000000000000000000000000000000000000
--- a/Notebooks/Comparing direct and global.ipynb	
+++ /dev/null
@@ -1,217 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:29:55.265096Z",
-     "start_time": "2021-01-21T17:29:53.064544Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "import os\n",
-    "import time\n",
-    "\n",
-    "# Self-code imports\n",
-    "import polytopes.baselines as baselines\n",
-    "from polytopes.model.note import Note\n",
-    "from polytopes.model.chord import Chord\n",
-    "import polytopes.polytopical_costs as pc\n",
-    "import polytopes.data_manipulation as dm\n",
-    "import polytopes.chord_movement as mvt\n",
-    "import polytopes.pattern_manipulation as pm\n",
-    "import polytopes.sequence_segmentation as seq_seg\n",
-    "\n",
-    "\n",
-    "#Generic imports\n",
-    "import numpy as np\n",
-    "import matplotlib.pyplot as plt\n",
-    "import pandas as pd\n",
-    "import math\n",
-    "import copy"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:29:55.279060Z",
-     "start_time": "2021-01-21T17:29:55.268089Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "pattern_persist_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Projects\\\\PhD main projects\\\\On Git\\\\Code\\\\Polytopes and relation\\\\polytopes\"\n",
-    "flow_file_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Annotations MIREX Quaero\\\\annotations_as_flow\\\\\"\n",
-    "song = \"002\"\n",
-    "bag_of_chords = []\n",
-    "max_size = 48\n",
-    "file = open(flow_file_path + song + \".flow\", \"r\") \n",
-    "for chord in file.readlines():\n",
-    "    bag_of_chords.append(chord.split(\"\\n\")[0])"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:34:18.787824Z",
-     "start_time": "2021-01-21T17:29:55.282052Z"
-    }
-   },
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "C:\\Users\\amarmore\\AppData\\Local\\Continuum\\anaconda3\\envs\\s_and_c\\lib\\site-packages\\ipykernel_launcher.py:27: DeprecationWarning: elementwise comparison failed; this will raise an error in the future.\n",
-      "C:\\Users\\amarmore\\AppData\\Local\\Continuum\\anaconda3\\envs\\s_and_c\\lib\\site-packages\\ipykernel_launcher.py:27: DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.\n"
-     ]
-    },
-    {
-     "data": {
-      "image/png": "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\n",
-      "text/plain": [
-       "<Figure size 432x288 with 1 Axes>"
-      ]
-     },
-     "metadata": {
-      "needs_background": "light"
-     },
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "image/png": "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\n",
-      "text/plain": [
-       "<Figure size 432x288 with 1 Axes>"
-      ]
-     },
-     "metadata": {
-      "needs_background": "light"
-     },
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "cnt_equal = []\n",
-    "cnt_diff = []\n",
-    "for current_idx in range(2, len(bag_of_chords)):\n",
-    "    if current_idx < 8:\n",
-    "        possible_starts = [0]\n",
-    "    elif current_idx == len(bag_of_chords) - 1:\n",
-    "        possible_starts = sh.possible_segment_start(current_idx, min_size = 2, max_size = max_size)\n",
-    "    else:\n",
-    "        possible_starts = sh.possible_segment_start(current_idx, min_size = 8, max_size = max_size)\n",
-    "    for possible_start_idx in possible_starts:\n",
-    "        if possible_start_idx < 0:\n",
-    "            raise err.ToDebugException(\"Invalid value of start index.\")\n",
-    "        segment = [bag_of_chords[k] for k in range(possible_start_idx, current_idx + 1)]\n",
-    "        segment_size = len(segment)\n",
-    "        \n",
-    "        try:\n",
-    "            this_bag_direct = np.load(\"{}\\\\persisted_content\\\\compute_patterns_with_antecedents_for_size_{}.npy\".format(pattern_persist_path, segment_size), allow_pickle = True)\n",
-    "            this_bag_global = np.load(\"{}\\\\persisted_content\\\\compute_patterns_with_global_antecedents_for_size_{}.npy\".format(pattern_persist_path, segment_size), allow_pickle = True)\n",
-    "        except FileNotFoundError:\n",
-    "            this_bag_direct = sh.compute_patterns_with_antecedents_for_size(segment_size)\n",
-    "            arr = np.array(this_bag_direct, dtype=object)\n",
-    "            np.save(\"{}\\\\persisted_content\\\\compute_patterns_with_antecedents_for_size_{}\".format(pattern_persist_path, segment_size), arr)\n",
-    "            this_bag_global = sh.compute_patterns_with_global_antecedents_for_size(segment_size)\n",
-    "            arr_glob = np.array(this_bag_global, dtype=object)\n",
-    "            np.save(\"{}\\\\persisted_content\\\\compute_patterns_with_global_antecedents_for_size_{}\".format(pattern_persist_path, segment_size), arr_glob)\n",
-    "\n",
-    "        if this_bag_direct != []:\n",
-    "            this_segment_cost = math.inf\n",
-    "            \n",
-    "            if len(this_bag_direct) != len(this_bag_global):\n",
-    "                raise NotImplementedError(\"Chelou\")\n",
-    "\n",
-    "            for i in range(len(this_bag_direct)):\n",
-    "                a_pattern_direct = this_bag_direct[i]\n",
-    "                a_pattern_global = this_bag_global[i]\n",
-    "                if not np.array(a_pattern_direct[0] == a_pattern_global[0]):               \n",
-    "                    raise NotImplementedError(\"Aussi chelou\")\n",
-    "\n",
-    "                this_polytope_cost_direct = pc.guichaoua_cost(segment, a_pattern_direct[0], a_pattern_direct[3], a_pattern_direct[4], a_pattern_direct[5])\n",
-    "                this_polytope_cost_global = pc.guichaoua_cost_global_antecedents_successors(segment, a_pattern_global[0], a_pattern_global[3], a_pattern_global[4], a_pattern_global[5])\n",
-    "                if this_polytope_cost_direct != this_polytope_cost_global:\n",
-    "                    cnt_diff.append(segment_size)\n",
-    "                    #print(\"la\")\n",
-    "                else:\n",
-    "                    cnt_equal.append(segment_size)\n",
-    "                    \n",
-    "plt.hist(cnt_diff)\n",
-    "plt.show()\n",
-    "plt.hist(cnt_equal)\n",
-    "plt.show()"
-   ]
-  }
- ],
- "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.7.5"
-  },
-  "toc": {
-   "base_numbering": 1,
-   "nav_menu": {},
-   "number_sections": true,
-   "sideBar": true,
-   "skip_h1_title": false,
-   "title_cell": "Table of Contents",
-   "title_sidebar": "Contents",
-   "toc_cell": false,
-   "toc_position": {},
-   "toc_section_display": true,
-   "toc_window_display": false
-  },
-  "varInspector": {
-   "cols": {
-    "lenName": 16,
-    "lenType": 16,
-    "lenVar": 40
-   },
-   "kernels_config": {
-    "python": {
-     "delete_cmd_postfix": "",
-     "delete_cmd_prefix": "del ",
-     "library": "var_list.py",
-     "varRefreshCmd": "print(var_dic_list())"
-    },
-    "r": {
-     "delete_cmd_postfix": ") ",
-     "delete_cmd_prefix": "rm(",
-     "library": "var_list.r",
-     "varRefreshCmd": "cat(var_dic_list()) "
-    }
-   },
-   "types_to_exclude": [
-    "module",
-    "function",
-    "builtin_function_or_method",
-    "instance",
-    "_Feature"
-   ],
-   "window_display": false
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/Notebooks/Louboutaoua - on song.ipynb b/Notebooks/Louboutaoua - on song.ipynb
deleted file mode 100644
index ca19baaa1053695f9ad5fee3f8b3552da15cb2ed..0000000000000000000000000000000000000000
--- a/Notebooks/Louboutaoua - on song.ipynb	
+++ /dev/null
@@ -1,378 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:25:28.291265Z",
-     "start_time": "2021-01-21T17:25:26.703476Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "import os\n",
-    "import time\n",
-    "\n",
-    "# Self-code imports\n",
-    "import polytopes.segmentation_algorithms as algos\n",
-    "from polytopes.model.note import Note\n",
-    "from polytopes.model.chord import Chord\n",
-    "import polytopes.polytopical_costs as pc\n",
-    "import polytopes.data_manipulation as dm\n",
-    "import polytopes.pattern_manip as pm\n",
-    "import polytopes.pattern_factory as pf\n",
-    "import polytopes.segmentation_helper as sh\n",
-    "\n",
-    "#Generic imports\n",
-    "import numpy as np\n",
-    "import matplotlib.pyplot as plt\n",
-    "import pandas as pd\n",
-    "import math\n",
-    "import copy"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:25:28.303197Z",
-     "start_time": "2021-01-21T17:25:28.296232Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "# Hyperparams\n",
-    "max_size = 47\n",
-    "min_size = 8\n",
-    "positive_segment_size_penalty = 0\n",
-    "negative_segment_size_penalty = 0#.125\n",
-    "target_size = 32\n",
-    "positive_penalty = 0#2.25\n",
-    "negative_penalty = 0#3"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# On a song"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:25:28.320154Z",
-     "start_time": "2021-01-21T17:25:28.306191Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "flow_file_path = \"C:\\\\Users\\\\amarmore\\\\Desktop\\\\Annotations MIREX Quaero\\\\annotations_as_flow\\\\\"\n",
-    "song = \"001\"\n",
-    "bag_of_chords = []\n",
-    "file = open(flow_file_path + song + \".flow\", \"r\") \n",
-    "for chord in file.readlines():\n",
-    "    bag_of_chords.append(chord.split(\"\\n\")[0])"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:58:19.456535Z",
-     "start_time": "2021-01-21T17:25:28.323147Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "c:\\users\\amarmore\\desktop\\projects\\phd main projects\\on git\\code\\polytopes and relation\\polytopes\\segmentation_algorithms.py:119: UserWarning: No Polytope is available for this size of segment. Trying sequential cost instead.\n",
-      "  warnings.warn(\"No Polytope is available for this size of segment. Trying sequential cost instead.\")\n"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "My frontiers: [0, 24, 56, 84, 112, 148, 176, 184, 192, 220, 256, 284, 292, 317, 328, 356, 368, 396, 428, 462]\n",
-      "Cost: 237\n",
-      "Guichaoua's frontiers: [0, 20, 52, 84, 112, 144, 176, 192, 220, 252, 284, 292, 332, 364, 396, 428, 462]\n",
-      "Equality ? False\n",
-      "\n"
-     ]
-    }
-   ],
-   "source": [
-    "frontiers, costs = algos.dynamic_minimization_louboutaoua(bag_of_chords, segment_size_penalty = 0, irregularity_penalty = 0)\n",
-    "\n",
-    "print(\"My frontiers: {}\".format(frontiers))\n",
-    "print(\"Cost: {}\".format(costs))\n",
-    "\n",
-    "guichaoua_estimates = open(flow_file_path + \"Guichaoua Estimates\\\\Experiments\\\\\" + song + \".frontiers_estimated\", \"r\")\n",
-    "tab = guichaoua_estimates.read().split(\" \")\n",
-    "guichaoua_frontiers = [int(i) - 1 for i in tab if i != \"\\n\"]\n",
-    "guichaoua_frontiers.append(frontiers[-1])\n",
-    "print(\"Guichaoua's frontiers: {}\".format(guichaoua_frontiers))\n",
-    "print(\"Equality ? {}\\n\".format(guichaoua_frontiers == frontiers))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:58:19.462481Z",
-     "start_time": "2021-01-21T17:58:19.457493Z"
-    }
-   },
-   "outputs": [],
-   "source": [
-    "frontiers = [0, 24, 56, 84, 112, 148, 180, 220, 256, 292, 328, 368, 396, 428, 462] # this_poltyope_cost, 23min\n",
-    "#333, [0, 24, 56, 84, 112, 148, 180, 220, 256, 292, 328, 368, 396, 428, 462] #this_segment_cost, 23min34\n",
-    "#333, [0, 24, 56, 84, 112, 148, 180, 220, 256, 292, 328, 368, 396, 428, 462] #Nothing, 24 min24"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 6,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:58:43.325834Z",
-     "start_time": "2021-01-21T17:58:19.463478Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Cost: 12 at size 24\n",
-      "Sequence: [[[[['Abm', 'Abm'], ['Abm', 'Abm']], [['F#', 'F#'], ['F#', 'F#']]], [[['E', 'E'], ['E', 'E']], [['F#', 'F#'], ['F#', 'F#']]]], [[[['F#', 'F#'], ['F#', 'F#']], [['Eb', 'Eb'], ['Eb', 'Eb']]]]]\n",
-      "0\n",
-      "Cost: 21 at size 32\n",
-      "Sequence: [[[[['Abm', 'Abm'], ['B', 'B']], [['Abm', 'Abm'], ['B', 'B']]], [[['E', 'E'], ['Eb', 'Eb']], [['E', 'E'], ['Eb', 'Eb']]]], [[[['Abm', 'Abm'], ['F#', 'Eb']], [['Abm', 'Abm'], ['F#', 'Eb']]], [[['E', 'E'], ['Abm', 'Abm']], [['E', 'E'], ['Abm', 'Abm']]]]]\n",
-      "5\n",
-      "Cost: 12 at size 28\n",
-      "Sequence: [[[[['F#', 'F#'], ['F#', 'F#']], [['C#', 'C#'], ['C#', 'C#']]], [[['E', 'E'], ['F#', 'F#']], [['Abm', 'Abm'], ['Abm', 'Abm']]]], [[[['F#', 'F#'], ['F#', 'F#']], [['C#', 'C#'], ['C#', 'C#']]], [[['E', 'E'], ['F#', 'F#']]]]]\n",
-      "4\n",
-      "Cost: 13 at size 28\n",
-      "Sequence: [[[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'F']]], [[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'Bb']]]], [[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'F']]], [[['Ab', 'Ab'], ['Bb', 'Bb']]]]]\n",
-      "5\n",
-      "Cost: 12 at size 36\n",
-      "Sequence: [[[[['Cm', 'Cm'], ['Ab', 'Ab']], [['Cm', 'Cm'], ['Ab', 'Ab']]], [[['Eb', 'Eb'], ['G', 'G']], [['Eb', 'Eb'], ['G', 'G']]]], [[[['Cm', 'Cm'], ['Ab', 'Ab']], [['Cm', 'Cm'], ['Ab', 'Ab']]], [[['Eb', 'Eb'], [('G', 'G'), ('G', 'G')]], [['Eb', 'Eb'], [('Eb', 'Eb'), ('Eb', 'Eb')]]]]]\n",
-      "9\n",
-      "Cost: 21 at size 32\n",
-      "Sequence: [[[[['Abm', 'Abm'], ['B', 'B']], [['Abm', 'Abm'], ['B', 'B']]], [[['E', 'E'], ['Eb', 'Eb']], [['E', 'E'], ['Eb', 'Eb']]]], [[[['Abm', 'Abm'], ['F#', 'Eb']], [['Abm', 'Abm'], ['F#', 'Eb']]], [[['E', 'E'], ['Abm', 'Abm']], [['E', 'E'], ['Abm', 'Abm']]]]]\n",
-      "5\n",
-      "Cost: 38 at size 40\n",
-      "Sequence: [[[[['F#', 'F#'], ['E', 'F#']], [['F#', 'F#'], ['E', 'F#']]], [[['C#', 'C#'], [('Cm', 'Cm'), ('Cm', 'Cm')]], [['C#', 'C#'], [('Cm', 'Cm'), ('Cm', 'F')]]]], [[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'Cm']]], [[['Cm', 'Cm'], [('Cm', 'Cm'), ('Ab', 'Ab')]], [['Cm', 'Bb'], [('Cm', 'F'), ('Bb', 'Bb')]]]]]\n",
-      "8\n",
-      "Cost: 12 at size 36\n",
-      "Sequence: [[[[['Cm', 'Cm'], ['Ab', 'Ab']], [['Cm', 'Cm'], ['Ab', 'Ab']]], [[['Eb', 'Eb'], ['G', 'G']], [['Eb', 'Eb'], ['G', 'G']]]], [[[['Cm', 'Cm'], ['Ab', 'Ab']], [['Cm', 'Cm'], ['Ab', 'Ab']]], [[['Eb', 'Eb'], [('G', 'G'), ('G', 'G')]], [['Eb', 'Eb'], [('Eb', 'Eb'), ('Eb', 'Eb')]]]]]\n",
-      "9\n",
-      "Cost: 32 at size 36\n",
-      "Sequence: [[[[['Abm', 'Abm'], ['B', 'B']], [['Abm', 'Abm'], ['B', 'B']]], [[['E', 'E'], ['Eb', 'Eb']], [['E', 'E'], ['Eb', 'Eb']]]], [[[['Abm', 'Abm'], ['F#', 'Eb']], [['Abm', 'Abm'], ['F#', 'Eb']]], [[['E', 'E'], [('Abm', 'Abm'), ('Abm', 'Abm')]], [['E', 'E'], [('Abm', 'Abm'), ('E', 'Eb')]]]]]\n",
-      "2\n",
-      "Cost: 21 at size 36\n",
-      "Sequence: [[[[['Ebm', 'Ebm'], ['Ebm', 'Ebm']], [['Ebm', 'Ebm'], ['Ebm', 'Ab']]], [[['Ebm', 'Ebm'], ['Ebm', 'Ebm']], [['Ebm', 'Ebm'], ['Ebm', 'C#']]]], [[[['Ebm', 'Ebm'], ['Ebm', 'Ebm']], [['Ebm', 'Ebm'], ['Ebm', 'Ab']]], [[['C#', ('F#', 'F#')], ['E', ('A', 'A')]], [['C#', ('B', 'B')], ['E', ('D', 'D')]]]]]\n",
-      "1\n",
-      "Cost: 26 at size 40\n",
-      "Sequence: [[[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Eb', 'Eb'], ['Eb', 'Eb']]], [[['Ab', 'Ab'], [('Eb', 'Eb'), ('Eb', 'Eb')]], [['Ab', 'Ab'], [('G', 'G'), ('G', 'G')]]]], [[[['Cm', 'Cm'], ['Ab', 'Ab']], [['Cm', 'Cm'], ['Ab', 'Ab']]], [[['Eb', 'Eb'], [('G', 'G'), ('G', 'G')]], [['Eb', 'Eb'], [('Eb', 'Eb'), ('Eb', 'Eb')]]]]]\n",
-      "3\n",
-      "Cost: 14 at size 28\n",
-      "Sequence: [[[[['Abm', 'Abm'], ['Abm', 'Abm']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['E', 'E'], ['E', 'E']]]], [[[['B', 'B'], ['F#', 'F#']], [['B', 'B']]], [[['Eb', 'Eb'], ['Eb', 'Eb']], [['Eb', 'Eb']]]]]\n",
-      "6\n",
-      "Cost: 21 at size 32\n",
-      "Sequence: [[[[['Abm', 'Abm'], ['B', 'B']], [['Abm', 'Abm'], ['B', 'B']]], [[['E', 'E'], ['Eb', 'Eb']], [['E', 'E'], ['Eb', 'Eb']]]], [[[['Abm', 'Abm'], ['F#', 'Eb']], [['Abm', 'Abm'], ['F#', 'Eb']]], [[['E', 'E'], ['Abm', 'Abm']], [['E', 'E'], ['Abm', 'Abm']]]]]\n",
-      "5\n",
-      "Cost: 12 at size 34\n",
-      "Sequence: [[[[['F#', 'F#'], ['F#', 'F#']], [['C#', 'C#'], ['C#', 'C#']]], [[['E', 'E'], ['F#', 'F#']], [['Abm', 'Abm'], ['Abm', 'Abm']]]], [[[['F#', 'F#'], ['F#', 'F#']], [['C#', 'C#'], ['C#', 'C#']]], [[['E', 'E'], [('F#', 'F#'), ('F#', 'F#')]], [['Abm', 'Abm'], [('Abm', 'Abm')]]]]]\n",
-      "0\n",
-      "Ze sum:267\n"
-     ]
-    }
-   ],
-   "source": [
-    "the_sum = 0\n",
-    "for start, end in zip(frontiers[:-1], frontiers[1:]):\n",
-    "    segment = bag_of_chords[start:end]\n",
-    "    #print(segment)\n",
-    "    size = len(segment)\n",
-    "    bag_of_patterns = sh.compute_patterns_with_ppp_and_antecedents_for_size(size)\n",
-    "    the_min = math.inf\n",
-    "    best_pattern = None\n",
-    "    for a_pattern in bag_of_patterns:\n",
-    "        this_polytope_cost = math.inf\n",
-    "        best_ppp_idx = None\n",
-    "        for i in range(len(a_pattern[0])):\n",
-    "            this_ppp_cost = pc.louboutaoua_cost(segment, a_pattern[0][i], a_pattern[3], a_pattern[4], a_pattern[5], a_pattern[6][i])\n",
-    "            if this_ppp_cost < this_polytope_cost:\n",
-    "                best_ppp_idx = i\n",
-    "                this_polytope_cost = this_ppp_cost\n",
-    "        cost = this_polytope_cost\n",
-    "        cost += pc.irregularities_penalty_guichaoua(adding_code = a_pattern[1], deleting_code = a_pattern[2], positive_penalty = positive_penalty, negative_penalty = negative_penalty)\n",
-    "        if cost < the_min:\n",
-    "            best_ppp = a_pattern[0][best_ppp_idx]\n",
-    "            the_min = cost\n",
-    "    the_min += sh.penalty_cost_guichaoua(size, target_size = 32, positive_segment_size_penalty = positive_segment_size_penalty, negative_segment_size_penalty = negative_segment_size_penalty)\n",
-    "    if the_min != math.inf:\n",
-    "        print(\"Cost: {} at size {}\".format(the_min, end-start))\n",
-    "        print(\"Sequence: {}\".format(pf.apply_chords_on_pattern(best_ppp,segment)))\n",
-    "        print(best_ppp_idx)\n",
-    "        the_sum += the_min\n",
-    "    else:\n",
-    "        print(\"Sequential cost at size {}, not computed\".format(end-start))\n",
-    "print(\"Ze sum:{}\".format(the_sum))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 7,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2021-01-21T17:59:14.568432Z",
-     "start_time": "2021-01-21T17:58:43.329792Z"
-    }
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Cost: 6 at size 20\n",
-      "Sequence: [[[['Abm', 'Abm'], ['Abm', 'Abm']], [['F#', 'F#'], ['F#', 'F#']]], [[['E', 'E'], ['E', 'E']], [[('F#', 'F#'), ('F#', 'F#')], [('F#', 'F#'), ('F#', 'F#')]]]]\n",
-      "Cost: 39 at size 32\n",
-      "Sequence: [[[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['B', 'B'], ['B', 'B']]]], [[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['F#', 'F#'], ['Eb', 'Eb']]]]]\n",
-      "Cost: 20 at size 32\n",
-      "Sequence: [[[[['Abm', 'Abm'], ['Abm', 'Abm']], [['F#', 'F#'], ['F#', 'F#']]], [[['C#', 'C#'], [('C#', 'C#'), ('E', 'E')]], [['F#', 'F#']]]], [[[['Abm', 'Abm'], ['Abm', 'Abm']], [['F#', 'F#'], ['F#', 'F#']]], [[['C#', 'C#'], [('C#', 'C#'), ('E', 'E')]], [['F#', 'F#']]]]]\n",
-      "Cost: 13 at size 28\n",
-      "Sequence: [[[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'F']]], [[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'Bb']]]], [[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'F']]], [[['Ab', 'Ab'], ['Bb', 'Bb']]]]]\n",
-      "Cost: 12 at size 32\n",
-      "Sequence: [[[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Ab', 'Ab'], ['Ab', 'Ab']]], [[['Eb', 'Eb'], ['Eb', 'Eb']], [['G', 'G'], ['G', 'G']]]], [[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Ab', 'Ab'], ['Ab', 'Ab']]], [[['Eb', 'Eb'], ['Eb', 'Eb']], [['G', 'G'], ['G', 'G']]]]]\n",
-      "Cost: 39 at size 32\n",
-      "Sequence: [[[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['B', 'B'], ['B', 'B']]]], [[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['F#', 'F#'], ['Eb', 'Eb']]]]]\n",
-      "Cost: 20 at size 16\n",
-      "Sequence: [[[['Abm', 'Abm'], ['Abm', 'Abm']], [['F#', 'F#'], ['F#', 'F#']]], [[['C#', 'C#'], [('C#', 'C#'), ('E', 'E')]], [['F#', 'F#']]]]\n",
-      "Cost: 13 at size 28\n",
-      "Sequence: [[[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'F']]], [[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'Bb']]]], [[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Cm', 'Cm'], ['Cm', 'F']]], [[['Ab', 'Ab'], ['Bb', 'Bb']]]]]\n",
-      "Cost: 12 at size 32\n",
-      "Sequence: [[[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Ab', 'Ab'], ['Ab', 'Ab']]], [[['Eb', 'Eb'], ['Eb', 'Eb']], [['G', 'G'], ['G', 'G']]]], [[[['Cm', 'Cm'], ['Cm', 'Cm']], [['Ab', 'Ab'], ['Ab', 'Ab']]], [[['Eb', 'Eb'], ['Eb', 'Eb']], [['G', 'G'], ['G', 'G']]]]]\n",
-      "Cost: 39 at size 32\n",
-      "Sequence: [[[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['B', 'B'], ['B', 'B']]]], [[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['F#', 'F#'], ['Eb', 'Eb']]]]]\n",
-      "Cost: 11 at size 8\n",
-      "Sequence: [[['Abm', 'Abm'], ['Abm', 'Abm']], [['Abm', ('Abm', 'E')], ['Eb']]]\n",
-      "Cost: 33 at size 40\n",
-      "Sequence: [[[[['Ebm', 'Ebm'], ['Ebm', 'Ebm']], [['Ebm', 'Ebm'], ['Ebm', 'Ebm']]], [[['Ebm', 'Ebm'], ['Ebm', 'Ebm']], [['Ebm', 'Ab'], ['Ebm', 'C#']]]], [[[['Ebm', 'Ebm'], ['B', 'B']], [['Ebm', 'Ebm'], ['E', 'E']]], [[[('Ebm', 'Ebm'), ('Ebm', 'Ab')], [('A', 'A'), ('D', 'D')]], [[('C#', 'C#'), ('F#', 'F#')], [('Eb', 'Eb'), ('Eb', 'Eb')]]]]]\n",
-      "Cost: 16 at size 32\n",
-      "Sequence: [[[[['Eb', 'Eb'], ['Cm', 'Cm']], [['Eb', 'Eb'], ['Cm', 'Cm']]], [[['Ab', 'Ab'], ['Ab', 'Ab']], [['Ab', 'Ab'], ['Ab', 'Ab']]]], [[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Eb', 'Eb'], ['Eb', 'Eb']]], [[['G', 'G'], ['G', 'G']], [['G', 'G'], ['G', 'G']]]]]\n",
-      "Cost: 39 at size 32\n",
-      "Sequence: [[[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['B', 'B'], ['B', 'B']]]], [[[['Eb', 'Eb'], ['Eb', 'Eb']], [['Abm', 'Abm'], ['Abm', 'Abm']]], [[['E', 'E'], ['E', 'E']], [['F#', 'F#'], ['Eb', 'Eb']]]]]\n",
-      "Cost: 21 at size 32\n",
-      "Sequence: [[[[['Abm', 'Abm'], ['B', 'B']], [['Abm', 'Abm'], ['B', 'B']]], [[['E', 'E'], ['Eb', 'Eb']], [['E', 'E'], ['Eb', 'Eb']]]], [[[['Abm', 'Abm'], ['F#', 'Eb']], [['Abm', 'Abm'], ['F#', 'Eb']]], [[['E', 'E'], ['Abm', 'Abm']], [['E', 'E'], ['Abm', 'Abm']]]]]\n",
-      "Cost: 12 at size 34\n",
-      "Sequence: [[[[['F#', 'F#'], ['F#', 'F#']], [['C#', 'C#'], ['C#', 'C#']]], [[['E', 'E'], ['F#', 'F#']], [['Abm', 'Abm'], ['Abm', 'Abm']]]], [[[['F#', 'F#'], ['F#', 'F#']], [['C#', 'C#'], ['C#', 'C#']]], [[['E', 'E'], [('F#', 'F#'), ('F#', 'F#')]], [['Abm', 'Abm'], [('Abm', 'Abm')]]]]]\n",
-      "Ze sum:345\n"
-     ]
-    }
-   ],
-   "source": [
-    "the_sum = 0\n",
-    "for start, end in zip(guichaoua_frontiers[:-1], guichaoua_frontiers[1:]):\n",
-    "    segment = bag_of_chords[start:end]\n",
-    "    size = len(segment)\n",
-    "    bag_of_patterns = sh.compute_patterns_with_ppp_and_antecedents_for_size(size)\n",
-    "    the_min = math.inf\n",
-    "    best_pattern = None\n",
-    "    for a_pattern in bag_of_patterns:\n",
-    "        this_polytope_cost = math.inf\n",
-    "        for i in range(len(a_pattern[0])):\n",
-    "            this_ppp_cost = pc.louboutaoua_cost(segment, a_pattern[0][i], a_pattern[3], a_pattern[4], a_pattern[5], a_pattern[6][i])\n",
-    "            if this_ppp_cost < this_polytope_cost:\n",
-    "                best_ppp_idx = i\n",
-    "                this_polytope_cost = this_ppp_cost\n",
-    "        cost = this_polytope_cost\n",
-    "        cost += pc.irregularities_penalty_guichaoua(adding_code = a_pattern[1], deleting_code = a_pattern[2], positive_penalty = positive_penalty, negative_penalty = negative_penalty)\n",
-    "        if cost < the_min:\n",
-    "            best_ppp = a_pattern[0][best_ppp_idx]\n",
-    "            the_min = cost\n",
-    "    the_min += sh.penalty_cost_guichaoua(size, target_size = 32, positive_segment_size_penalty = positive_segment_size_penalty, negative_segment_size_penalty = negative_segment_size_penalty)\n",
-    "    print(\"Cost: {} at size {}\".format(the_min, end-start))\n",
-    "    print(\"Sequence: {}\".format(pf.apply_chords_on_pattern(best_ppp,segment)))\n",
-    "    the_sum += the_min\n",
-    "print(\"Ze sum:{}\".format(the_sum))"
-   ]
-  }
- ],
- "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.7.5"
-  },
-  "toc": {
-   "base_numbering": 1,
-   "nav_menu": {},
-   "number_sections": true,
-   "sideBar": true,
-   "skip_h1_title": false,
-   "title_cell": "Table of Contents",
-   "title_sidebar": "Contents",
-   "toc_cell": false,
-   "toc_position": {},
-   "toc_section_display": true,
-   "toc_window_display": false
-  },
-  "varInspector": {
-   "cols": {
-    "lenName": 16,
-    "lenType": 16,
-    "lenVar": 40
-   },
-   "kernels_config": {
-    "python": {
-     "delete_cmd_postfix": "",
-     "delete_cmd_prefix": "del ",
-     "library": "var_list.py",
-     "varRefreshCmd": "print(var_dic_list())"
-    },
-    "r": {
-     "delete_cmd_postfix": ") ",
-     "delete_cmd_prefix": "rm(",
-     "library": "var_list.r",
-     "varRefreshCmd": "cat(var_dic_list()) "
-    }
-   },
-   "types_to_exclude": [
-    "module",
-    "function",
-    "builtin_function_or_method",
-    "instance",
-    "_Feature"
-   ],
-   "window_display": false
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/Notebooks/Tutorial - model classes.ipynb b/Notebooks/Tutorial - model classes.ipynb
deleted file mode 100644
index c8fc8565cc2fb698645f3a5fcabe60046bc7201e..0000000000000000000000000000000000000000
--- a/Notebooks/Tutorial - model classes.ipynb	
+++ /dev/null
@@ -1,2184 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "# Tutorial for the model classes."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "This notebook will briefly present some functionnalities implemented to cope with symbolic representation of music, as an upgrade of C. Louboutin's code."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "It contains 2 files: note.py, chord.py.\n",
-    "All these files represent different objects, used to handle musical information at different levels.\n",
-    "\n",
-    "A note is the most basic element, a chord is an aggregation of notes."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## note.py"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:35:39.980475Z",
-     "start_time": "2020-10-30T15:35:39.976485Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [],
-   "source": [
-    "from polytopes.model.note import Note"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Let's start with the Note object, which is the lowest-level object in music.\n",
-    "\n",
-    "The interest of defining such an object is that it allows us to control what is an acceptable note, and what isn't."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Initialization"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Particularily, a Note contains two attributes:\n",
-    " - a number: between 0 and 11, which corresponds to the pitch classe of the note. 0 represent the C pitch class, and 11 the B pitch class. \n",
-    " - a symbol: the classical representation of a note as a letter, with flat (\"b\") or sharp(\"#\") suffixes."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:35:41.270648Z",
-     "start_time": "2020-10-30T15:35:41.258680Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "\"<class 'polytopes.model.note.Note'>(Symbol: 'A', Number: 9)\""
-      ]
-     },
-     "execution_count": 3,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "note_a = Note('A')\n",
-    "repr(note_a)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "We can access to these attributes directly on the object:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:35:42.215995Z",
-     "start_time": "2020-10-30T15:35:42.211006Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "'A'"
-      ]
-     },
-     "execution_count": 4,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "note_a.symbol"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:35:42.708684Z",
-     "start_time": "2020-10-30T15:35:42.702692Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "9"
-      ]
-     },
-     "execution_count": 5,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "note_a.number"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "A note can be defined by it's symbol or it's number."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 6,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:35:43.666480Z",
-     "start_time": "2020-10-30T15:35:43.660496Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "<class 'polytopes.model.note.Note'>(Symbol: 'A', Number: 9)"
-      ]
-     },
-     "execution_count": 6,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "Note('9')"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 7,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:35:44.156913Z",
-     "start_time": "2020-10-30T15:35:44.151926Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "<class 'polytopes.model.note.Note'>(Symbol: 'A', Number: 9)"
-      ]
-     },
-     "execution_count": 7,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "Note('A')"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 8,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:35:44.724397Z",
-     "start_time": "2020-10-30T15:35:44.718413Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "True"
-      ]
-     },
-     "execution_count": 8,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "Note('9') == Note('A')"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Modification"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "A Note object can also be modified.\n",
-    "\n",
-    "Modifying the number of a note will also modify it's symbol, and vice-versa, as both are linked."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 9,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:35:47.003807Z",
-     "start_time": "2020-10-30T15:35:46.998822Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Before modification: <class 'polytopes.model.note.Note'>(Symbol: 'B', Number: 11)\n",
-      "After modification: <class 'polytopes.model.note.Note'>(Symbol: 'D', Number: 2)\n",
-      "After modifying its number: <class 'polytopes.model.note.Note'>(Symbol: 'G', Number: 7)\n"
-     ]
-    }
-   ],
-   "source": [
-    "a_note = Note('B')\n",
-    "print(\"Before modification: \" + str(a_note))\n",
-    "\n",
-    "a_note.symbol = 'D'\n",
-    "print(\"After modification: \" + str(a_note))\n",
-    "\n",
-    "a_note.number = 7\n",
-    "print(\"After modifying its number: \" + str(a_note))"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Still, not every symbol or every number is acceptable. Hence, modifying or initializing a Note with a wrong number should not be tolerated."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 10,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:35:50.898336Z",
-     "start_time": "2020-10-30T15:35:50.763098Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "ename": "InvalidNoteNumberException",
-     "evalue": "The desired new number is too large to be a valid note.",
-     "output_type": "error",
-     "traceback": [
-      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
-      "\u001b[1;31mInvalidNoteNumberException\u001b[0m                Traceback (most recent call last)",
-      "\u001b[1;32m<ipython-input-10-8a3266453d6f>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ma_note\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnumber\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m15\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
-      "\u001b[1;32mc:\\users\\amarmore\\desktop\\projects\\phd main projects\\on git\\code\\polytopes and relation\\polytopes\\model\\note.py\u001b[0m in \u001b[0;36m_set_number\u001b[1;34m(self, number)\u001b[0m\n\u001b[0;32m    122\u001b[0m             \u001b[1;32mraise\u001b[0m \u001b[0merr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mInvalidNoteNumberException\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"The desired new number is not an integer, and is not valid.\"\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    123\u001b[0m         \u001b[1;32mexcept\u001b[0m \u001b[0mIndexError\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 124\u001b[1;33m             \u001b[1;32mraise\u001b[0m \u001b[0merr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mInvalidNoteNumberException\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"The desired new number is too large to be a valid note.\"\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    125\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    126\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;31mInvalidNoteNumberException\u001b[0m: The desired new number is too large to be a valid note."
-     ]
-    }
-   ],
-   "source": [
-    "a_note.number = 15"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 11,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:35:52.920685Z",
-     "start_time": "2020-10-30T15:35:52.908717Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "ename": "InvalidNoteSymbolException",
-     "evalue": "This symbol is not a correct note symbol.",
-     "output_type": "error",
-     "traceback": [
-      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
-      "\u001b[1;31mInvalidNoteSymbolException\u001b[0m                Traceback (most recent call last)",
-      "\u001b[1;32m<ipython-input-11-20488d99cd64>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ma_note\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msymbol\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'K'\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
-      "\u001b[1;32mc:\\users\\amarmore\\desktop\\projects\\phd main projects\\on git\\code\\polytopes and relation\\polytopes\\model\\note.py\u001b[0m in \u001b[0;36m_set_symbol\u001b[1;34m(self, symbol)\u001b[0m\n\u001b[0;32m     87\u001b[0m             \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_number\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnumber_from_symbol\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     88\u001b[0m         \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 89\u001b[1;33m             \u001b[1;32mraise\u001b[0m \u001b[0merr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mInvalidNoteSymbolException\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"This symbol is not a correct note symbol.\"\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     90\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     91\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0m_get_number\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;31mInvalidNoteSymbolException\u001b[0m: This symbol is not a correct note symbol."
-     ]
-    }
-   ],
-   "source": [
-    "a_note.symbol = 'K'"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Finally, sharp and flat symbols should both exist but shouldn't invalid tests, as they represent the same note.\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 12,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:35:55.400706Z",
-     "start_time": "2020-10-30T15:35:55.396706Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "True"
-      ]
-     },
-     "execution_count": 12,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "Note('A#') == Note(\"Bb\")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "By default, a note symbol is set in flat convention. Still, it can be set to sharp with an argument in the constructor."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 13,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:35:57.297625Z",
-     "start_time": "2020-10-30T15:35:57.293373Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Default: <class 'polytopes.model.note.Note'>(Symbol: 'Bb', Number: 10)\n",
-      "In sharp: <class 'polytopes.model.note.Note'>(Symbol: 'A#', Number: 10)\n"
-     ]
-    }
-   ],
-   "source": [
-    "a_note = Note(\"A#\")\n",
-    "print(\"Default: \" + repr(a_note))\n",
-    "a_note = Note(\"A#\", flat = False)\n",
-    "print(\"In sharp: \" + repr(a_note))"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Additionally, one can modify a note to be in the sharp or in the flat system."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 14,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:01.128721Z",
-     "start_time": "2020-10-30T15:36:01.123584Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "In flat: <class 'polytopes.model.note.Note'>(Symbol: 'Bb', Number: 10)\n",
-      "In sharp: <class 'polytopes.model.note.Note'>(Symbol: 'A#', Number: 10)\n"
-     ]
-    }
-   ],
-   "source": [
-    "a_note = Note(\"Bb\")\n",
-    "print(\"In flat: \" + repr(a_note))\n",
-    "a_note.to_sharp()\n",
-    "print(\"In sharp: \" + repr(a_note))"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 15,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:02.901568Z",
-     "start_time": "2020-10-30T15:36:02.896604Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "In sharp: <class 'polytopes.model.note.Note'>(Symbol: 'A#', Number: 10)\n",
-      "In flat: <class 'polytopes.model.note.Note'>(Symbol: 'Bb', Number: 10)\n"
-     ]
-    }
-   ],
-   "source": [
-    "a_note = Note(\"A#\", flat = False)\n",
-    "print(\"In sharp: \" + repr(a_note))\n",
-    "a_note.to_flat()\n",
-    "print(\"In flat: \" + repr(a_note))"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### chord.py"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 16,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:07.685939Z",
-     "start_time": "2020-10-30T15:36:07.681950Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [],
-   "source": [
-    "from polytopes.model.chord import Chord"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "A chord is a set of mulitple pitches. Hence, a chord is defined from notes."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Initialization"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 17,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:10.163397Z",
-     "start_time": "2020-10-30T15:36:10.158409Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "<class 'polytopes.model.chord.Chord'>(Symbol: 'Am', Notes: [<class 'polytopes.model.note.Note'>(Symbol: 'A', Number: 9), <class 'polytopes.model.note.Note'>(Symbol: 'C', Number: 0), <class 'polytopes.model.note.Note'>(Symbol: 'E', Number: 4)])"
-      ]
-     },
-     "execution_count": 17,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "a = Note('A')\n",
-    "c = Note('C')\n",
-    "e = Note('E')\n",
-    "Chord([a,c,e])"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "A chord must contain at least one note."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 18,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:12.076386Z",
-     "start_time": "2020-10-30T15:36:12.061393Z"
-    }
-   },
-   "outputs": [
-    {
-     "ename": "InvalidChordNotesException",
-     "evalue": "Empty list of notes: a Chord must admit notes.",
-     "output_type": "error",
-     "traceback": [
-      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
-      "\u001b[1;31mInvalidChordNotesException\u001b[0m                Traceback (most recent call last)",
-      "\u001b[1;32m<ipython-input-18-bf07a16d637a>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mChord\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
-      "\u001b[1;32mc:\\users\\amarmore\\desktop\\projects\\phd main projects\\on git\\code\\polytopes and relation\\polytopes\\model\\chord.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, a_chord, redundancy)\u001b[0m\n\u001b[0;32m     71\u001b[0m             \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_notes\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mlocal_notes\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     72\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_notes\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 73\u001b[1;33m                 \u001b[1;32mraise\u001b[0m \u001b[0merr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mInvalidChordNotesException\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Empty list of notes: a Chord must admit notes.\"\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     74\u001b[0m             \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_triad\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtriad_from_notes\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     75\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtriad\u001b[0m \u001b[1;33m!=\u001b[0m \u001b[0mcst\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mAMBIGUOUS\u001b[0m \u001b[1;32mand\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_redundant\u001b[0m\u001b[1;33m:\u001b[0m \u001b[1;31m# A redundant chord shouldn't be reordered as it corresponds to permutated chord (#TODO: rename the parameter ?)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;31mInvalidChordNotesException\u001b[0m: Empty list of notes: a Chord must admit notes."
-     ]
-    }
-   ],
-   "source": [
-    "Chord([])"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "It can be directly defined by a list of numbers."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 19,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:14.333701Z",
-     "start_time": "2020-10-30T15:36:14.325723Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "<class 'polytopes.model.chord.Chord'>(Symbol: 'Am', Notes: [<class 'polytopes.model.note.Note'>(Symbol: 'A', Number: 9), <class 'polytopes.model.note.Note'>(Symbol: 'C', Number: 0), <class 'polytopes.model.note.Note'>(Symbol: 'E', Number: 4)])"
-      ]
-     },
-     "execution_count": 19,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "Chord([9, 0, 4])"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "!!!!!!!!!!!! A chord **can't** be defined by a list of note symbols (at least not yet)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 20,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:17.596300Z",
-     "start_time": "2020-10-30T15:36:17.581336Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "ename": "TypeError",
-     "evalue": "int() argument must be a string, a bytes-like object or a number, not 'list'",
-     "output_type": "error",
-     "traceback": [
-      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
-      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
-      "\u001b[1;32mc:\\users\\amarmore\\desktop\\projects\\phd main projects\\on git\\code\\polytopes and relation\\polytopes\\model\\chord.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, a_chord, redundancy)\u001b[0m\n\u001b[0;32m     67\u001b[0m                 \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 68\u001b[1;33m                     \u001b[0mnote_obj\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mNote\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma_note\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     69\u001b[0m                 \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mnote_obj\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_in_list_of_notes\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlocal_notes\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_redundant\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;31mValueError\u001b[0m: invalid literal for int() with base 10: 'A'",
-      "\nDuring handling of the above exception, another exception occurred:\n",
-      "\u001b[1;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
-      "\u001b[1;32m<ipython-input-20-6a8e4e2a89cb>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mChord\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'A'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'C'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'E'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
-      "\u001b[1;32mc:\\users\\amarmore\\desktop\\projects\\phd main projects\\on git\\code\\polytopes and relation\\polytopes\\model\\chord.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, a_chord, redundancy)\u001b[0m\n\u001b[0;32m     80\u001b[0m         \u001b[1;32mexcept\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m:\u001b[0m \u001b[1;31m# If it's a symbol\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     81\u001b[0m             \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 82\u001b[1;33m                 \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_symbol\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mformat_symbol\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma_chord\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     83\u001b[0m                 \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_root\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mroot_from_symbol\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     84\u001b[0m                 \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_triad\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtriad_from_symbol\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;32mc:\\users\\amarmore\\desktop\\projects\\phd main projects\\on git\\code\\polytopes and relation\\polytopes\\model\\chord.py\u001b[0m in \u001b[0;36mformat_symbol\u001b[1;34m(symbol)\u001b[0m\n\u001b[0;32m    693\u001b[0m     \"\"\"\n\u001b[0;32m    694\u001b[0m     \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 695\u001b[1;33m         \u001b[0mint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msymbol\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    696\u001b[0m         \u001b[1;32mraise\u001b[0m \u001b[0merr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mInvalidChordSymbolException\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"The symbol isn't valid.\"\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    697\u001b[0m     \u001b[1;32mexcept\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;31mTypeError\u001b[0m: int() argument must be a string, a bytes-like object or a number, not 'list'"
-     ]
-    }
-   ],
-   "source": [
-    "Chord(['A', 'C', 'E'])"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "However, a Chord can be defined by its symbol."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 21,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:21.550969Z",
-     "start_time": "2020-10-30T15:36:21.545981Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "<class 'polytopes.model.chord.Chord'>(Symbol: 'Abm', Notes: [<class 'polytopes.model.note.Note'>(Symbol: 'Ab', Number: 8), <class 'polytopes.model.note.Note'>(Symbol: 'B', Number: 11), <class 'polytopes.model.note.Note'>(Symbol: 'Eb', Number: 3)])"
-      ]
-     },
-     "execution_count": 21,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "Chord('Abmin')"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Defining a Chord by its symbol or by its notes doesn't change the value of its attributes."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 22,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:23.347691Z",
-     "start_time": "2020-10-30T15:36:23.342704Z"
-    }
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "True"
-      ]
-     },
-     "execution_count": 22,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "Chord('Abmin') == Chord([8, 11, 3])"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "When instanciated, a Chord has several attributes:\n",
-    " - notes: the list of notes of the Chord. These are Note objects.\n",
-    " - symbol: the symbol of the Chord.\n",
-    " - root: the root of the Chord.\n",
-    " - triad: the type of triad of the Chord (maj or min) if it's a triad."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 23,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:25.458179Z",
-     "start_time": "2020-10-30T15:36:25.453190Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[<class 'polytopes.model.note.Note'>(Symbol: 'A', Number: 9),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'Db', Number: 1),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'E', Number: 4)]"
-      ]
-     },
-     "execution_count": 23,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "chord = Chord('A')\n",
-    "chord.notes"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 24,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:27.419601Z",
-     "start_time": "2020-10-30T15:36:27.414602Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "'A'"
-      ]
-     },
-     "execution_count": 24,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "chord.symbol"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 25,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:27.944160Z",
-     "start_time": "2020-10-30T15:36:27.940510Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "<class 'polytopes.model.note.Note'>(Symbol: 'A', Number: 9)"
-      ]
-     },
-     "execution_count": 25,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "chord.root"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 26,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:28.472353Z",
-     "start_time": "2020-10-30T15:36:28.467367Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "'A'"
-      ]
-     },
-     "execution_count": 26,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "chord.triad"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Still, defined by its notes, a chord symbol can be ambiguous (ex: A6 (A with a sixth) is also F#m7)\n",
-    "\n",
-    "In that sense, a chord defined by its notes, when not a triad (perfect major or minor), will have its root and its symbol labelled as \"Ambiguous\""
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 27,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:30.499972Z",
-     "start_time": "2020-10-30T15:36:30.495979Z"
-    }
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "<class 'polytopes.model.chord.Chord'>(Symbol: 'Ambiguous', Notes: [<class 'polytopes.model.note.Note'>(Symbol: 'A', Number: 9), <class 'polytopes.model.note.Note'>(Symbol: 'Db', Number: 1), <class 'polytopes.model.note.Note'>(Symbol: 'E', Number: 4), <class 'polytopes.model.note.Note'>(Symbol: 'Gb', Number: 6)])"
-      ]
-     },
-     "execution_count": 27,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "Chord([9, 1, 4, 6])"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 28,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:32.195767Z",
-     "start_time": "2020-10-30T15:36:32.187788Z"
-    }
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "('Ambiguous', 'Ambiguous', 'Ambiguous')"
-      ]
-     },
-     "execution_count": 28,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "Chord([9, 1, 4, 6]).symbol, Chord([9, 1, 4, 6]).root, Chord([9, 1, 4, 6]).triad"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Modification"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "As for a Note, a Chord symbol or notes of a Chord can be directly modified."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 29,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:41.627387Z",
-     "start_time": "2020-10-30T15:36:41.621403Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Before modif: <class 'polytopes.model.chord.Chord'>(Symbol: 'B', Notes: [<class 'polytopes.model.note.Note'>(Symbol: 'B', Number: 11), <class 'polytopes.model.note.Note'>(Symbol: 'Eb', Number: 3), <class 'polytopes.model.note.Note'>(Symbol: 'Gb', Number: 6)])\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "[<class 'polytopes.model.note.Note'>(Symbol: 'B', Number: 11),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'Eb', Number: 3),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'Gb', Number: 6)]"
-      ]
-     },
-     "execution_count": 29,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "a_chord = Chord('B')\n",
-    "print(\"Before modif: %r\" % (a_chord))\n",
-    "a_chord.notes"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 30,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:43.296242Z",
-     "start_time": "2020-10-30T15:36:43.289260Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "After modif: <class 'polytopes.model.chord.Chord'>(Symbol: 'Ab', Notes: [<class 'polytopes.model.note.Note'>(Symbol: 'Ab', Number: 8), <class 'polytopes.model.note.Note'>(Symbol: 'C', Number: 0), <class 'polytopes.model.note.Note'>(Symbol: 'Eb', Number: 3)])\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "[<class 'polytopes.model.note.Note'>(Symbol: 'Ab', Number: 8),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'C', Number: 0),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'Eb', Number: 3)]"
-      ]
-     },
-     "execution_count": 30,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "a_chord.notes = [8, 0, 3]\n",
-    "print(\"After modif: %r\" % (a_chord))\n",
-    "a_chord.notes"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 31,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:45.000201Z",
-     "start_time": "2020-10-30T15:36:44.994248Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "After 2nd modif: <class 'polytopes.model.chord.Chord'>(Symbol: 'A7', Notes: [<class 'polytopes.model.note.Note'>(Symbol: 'A', Number: 9), <class 'polytopes.model.note.Note'>(Symbol: 'Db', Number: 1), <class 'polytopes.model.note.Note'>(Symbol: 'E', Number: 4), <class 'polytopes.model.note.Note'>(Symbol: 'G', Number: 7)])\n"
-     ]
-    },
-    {
-     "data": {
-      "text/plain": [
-       "[<class 'polytopes.model.note.Note'>(Symbol: 'A', Number: 9),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'Db', Number: 1),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'E', Number: 4),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'G', Number: 7)]"
-      ]
-     },
-     "execution_count": 31,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "a_chord.symbol = 'A7'\n",
-    "print(\"After 2nd modif: %r\" % (a_chord))\n",
-    "a_chord.notes"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Still, the other attributes can't, as they do not hold enough information on the new Chord to re-instanciate it."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 32,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:47.441333Z",
-     "start_time": "2020-10-30T15:36:47.427369Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "ename": "CantModifyAttribute",
-     "evalue": "Not on my watch: you can't modify this attribute alone, you can only modify the notes or the symbol.",
-     "output_type": "error",
-     "traceback": [
-      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
-      "\u001b[1;31mCantModifyAttribute\u001b[0m                       Traceback (most recent call last)",
-      "\u001b[1;32m<ipython-input-32-2efe97ae21f2>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0ma_chord\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mroot\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'B'\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
-      "\u001b[1;32mc:\\users\\amarmore\\desktop\\projects\\phd main projects\\on git\\code\\polytopes and relation\\polytopes\\model\\chord.py\u001b[0m in \u001b[0;36m_not_on_my_watch\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m    197\u001b[0m         \u001b[0mRaises\u001b[0m \u001b[0man\u001b[0m \u001b[0merror\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mthese\u001b[0m \u001b[0mattributes\u001b[0m \u001b[0mmust\u001b[0m \u001b[0mbe\u001b[0m \u001b[0mfound\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0meither\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mnotes\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mthe\u001b[0m \u001b[0msymbol\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;32mand\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mset\u001b[0m \u001b[0mindependantly\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mthey\u001b[0m \u001b[0mdon\u001b[0m\u001b[0;31m'\u001b[0m\u001b[0mt\u001b[0m \u001b[0mcontain\u001b[0m \u001b[0menough\u001b[0m \u001b[0minformation\u001b[0m \u001b[0mon\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mchord\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    198\u001b[0m         \"\"\"\n\u001b[1;32m--> 199\u001b[1;33m         \u001b[1;32mraise\u001b[0m \u001b[0merr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mCantModifyAttribute\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Not on my watch: you can't modify this attribute alone, you can only modify the notes or the symbol.\"\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    200\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    201\u001b[0m     \u001b[0mroot\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mproperty\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m_get_chord_root\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_not_on_my_watch\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
-      "\u001b[1;31mCantModifyAttribute\u001b[0m: Not on my watch: you can't modify this attribute alone, you can only modify the notes or the symbol."
-     ]
-    }
-   ],
-   "source": [
-    "a_chord.root = 'B'"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Adding a note"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "A note can be added to a Chord, which will modify all of its attributes accordingly."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 33,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:50.653614Z",
-     "start_time": "2020-10-30T15:36:50.648627Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[<class 'polytopes.model.note.Note'>(Symbol: 'A', Number: 9),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'Db', Number: 1),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'E', Number: 4),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'G', Number: 7)]"
-      ]
-     },
-     "execution_count": 33,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "chord = Chord('A')\n",
-    "chord.add_note(7)\n",
-    "chord.notes"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Still, the added Note is already in the Chord, it won't be redundant."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 34,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:52.466659Z",
-     "start_time": "2020-10-30T15:36:52.461672Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[<class 'polytopes.model.note.Note'>(Symbol: 'A', Number: 9),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'Db', Number: 1),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'E', Number: 4),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'G', Number: 7)]"
-      ]
-     },
-     "execution_count": 34,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "chord.notes"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 35,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:53.563757Z",
-     "start_time": "2020-10-30T15:36:53.557773Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[<class 'polytopes.model.note.Note'>(Symbol: 'A', Number: 9),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'Db', Number: 1),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'E', Number: 4),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'G', Number: 7)]"
-      ]
-     },
-     "execution_count": 35,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "chord.add_note(9)\n",
-    "chord.notes"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 36,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:53.874511Z",
-     "start_time": "2020-10-30T15:36:53.865535Z"
-    }
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "True"
-      ]
-     },
-     "execution_count": 36,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "Chord([8, 11, 3, 11]) == Chord([8, 11, 3, 11, 11, 11, 11])"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Notes in the chord"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "The attributes \"notes\" of a chord is a list, and so, an individual Note can be retrieved from this list."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 37,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:57.674854Z",
-     "start_time": "2020-10-30T15:36:57.667871Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "<class 'polytopes.model.note.Note'>(Symbol: 'Ab', Number: 8)"
-      ]
-     },
-     "execution_count": 37,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "a_chord = Chord([8, 0, 3])\n",
-    "a_chord.notes[0]"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "For convenience though, the i-th element of the .notes attribute can be accessed directly by indexing the Chord, as in:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 38,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:36:58.339461Z",
-     "start_time": "2020-10-30T15:36:58.334474Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "<class 'polytopes.model.note.Note'>(Symbol: 'Ab', Number: 8)"
-      ]
-     },
-     "execution_count": 38,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "a_chord[0]"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Inversely, the presence of a note in the chord can be tested as any element in a list:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 39,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:37:00.560917Z",
-     "start_time": "2020-10-30T15:37:00.554933Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "(True, False)"
-      ]
-     },
-     "execution_count": 39,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "Note(8) in a_chord.notes, Note(7) in a_chord.notes"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Or, more simply, by testing if the Chord contains this note:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 40,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:37:02.719718Z",
-     "start_time": "2020-10-30T15:37:02.714733Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "(True, False)"
-      ]
-     },
-     "execution_count": 40,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "Note(8) in a_chord, Note(7) in a_chord"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "To know the number of notes in a chord, one can use the method get_nb_notes():"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 41,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:37:05.609149Z",
-     "start_time": "2020-10-30T15:37:05.603649Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "3"
-      ]
-     },
-     "execution_count": 41,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "a_chord.get_nb_notes()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 42,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:37:08.439380Z",
-     "start_time": "2020-10-30T15:37:08.434394Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "4"
-      ]
-     },
-     "execution_count": 42,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "a_chord.add_note(7)\n",
-    "a_chord.get_nb_notes()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Finally, one can want to access to the notes as numbers, and there's a function for that:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 43,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:37:10.143551Z",
-     "start_time": "2020-10-30T15:37:10.138568Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[8, 0, 3, 7]"
-      ]
-     },
-     "execution_count": 43,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "a_chord.get_numbers()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### Chord with redundancy"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Defined that way, chords doesn't allow repetitions in its notes (which is logical since notes are expressed in pitch classes).\n",
-    "\n",
-    "This could become a problem when manipulating theoretical objects, for example in a context of optimal transport between chords.\n",
-    "\n",
-    "To solve this problem, a parameter of the constructor can allow redundancy in the notes of a chord.\n",
-    "\n",
-    "It is called redundancy and is a boolean."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 44,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:37:12.084047Z",
-     "start_time": "2020-10-30T15:37:12.077072Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[<class 'polytopes.model.note.Note'>(Symbol: 'Ab', Number: 8),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'B', Number: 11),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'Eb', Number: 3),\n",
-       " <class 'polytopes.model.note.Note'>(Symbol: 'B', Number: 11)]"
-      ]
-     },
-     "execution_count": 44,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "Chord([8, 11, 3, 11], redundancy = True).notes"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "When the object is created redundant, it remains redundant when its notes are modified."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 45,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:37:14.444702Z",
-     "start_time": "2020-10-30T15:37:14.439716Z"
-    }
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[8, 0, 3, 8]"
-      ]
-     },
-     "execution_count": 45,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "redundant_chord = Chord([8, 0, 3], redundancy = True)\n",
-    "redundant_chord.add_note(8)\n",
-    "redundant_chord.get_numbers()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 46,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:37:15.852253Z",
-     "start_time": "2020-10-30T15:37:15.844280Z"
-    }
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[8, 0, 3, 4, 3]"
-      ]
-     },
-     "execution_count": 46,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "redundant_chord = Chord([8, 0, 3], redundancy = True)\n",
-    "redundant_chord.notes = [8, 0, 3, 4, 3]\n",
-    "redundant_chord.get_numbers()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Conversely, a chord created without redundancy (default behavior) cannot be modified into a redundant chord."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 47,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:37:16.964692Z",
-     "start_time": "2020-10-30T15:37:16.958700Z"
-    }
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[8, 0, 3, 4]"
-      ]
-     },
-     "execution_count": 47,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "default_chord = Chord([8, 0, 3], redundancy = False) # or simply Chord([8, 0, 3])\n",
-    "default_chord.notes = [8, 0, 3, 4, 3]\n",
-    "default_chord.get_numbers()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "It also works when defined by its symbol."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 48,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:37:18.561793Z",
-     "start_time": "2020-10-30T15:37:18.555808Z"
-    },
-    "scrolled": true
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[8, 0, 3, 4]"
-      ]
-     },
-     "execution_count": 48,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "default_chord = Chord('A')\n",
-    "default_chord.notes = [8, 0, 3, 4, 3]\n",
-    "default_chord.get_numbers()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 49,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:37:19.882635Z",
-     "start_time": "2020-10-30T15:37:19.875653Z"
-    }
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[8, 0, 3, 4, 3]"
-      ]
-     },
-     "execution_count": 49,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "redundant_chord = Chord('A', redundancy = True)\n",
-    "redundant_chord.notes = [8, 0, 3, 4, 3]\n",
-    "redundant_chord.get_numbers()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "It should be noted that the notes of a triad are ordered when the chord is not redundant, and aren't ordered when the chord is.\n",
-    "\n",
-    "This is made to allow permutations when the chord is redundant, and to be more consistent with the real chord when it's not."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 50,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:37:20.603827Z",
-     "start_time": "2020-10-30T15:37:20.597844Z"
-    }
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "([8, 0, 3], <class 'polytopes.model.note.Note'>(Symbol: 'Ab', Number: 8))"
-      ]
-     },
-     "execution_count": 50,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "default_chord = Chord('A')\n",
-    "default_chord.notes = [3, 8, 0]\n",
-    "default_chord.get_numbers(), default_chord.root"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 51,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T15:37:22.478662Z",
-     "start_time": "2020-10-30T15:37:22.470683Z"
-    }
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "([3, 8, 0], <class 'polytopes.model.note.Note'>(Symbol: 'Ab', Number: 8))"
-      ]
-     },
-     "execution_count": 51,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "redundant_chord = Chord('A', redundancy = True)\n",
-    "redundant_chord.notes = [3, 8, 0]\n",
-    "redundant_chord.get_numbers(), redundant_chord.root"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## polytope.py"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {
-    "ExecuteTime": {
-     "end_time": "2020-10-30T10:55:12.222629Z",
-     "start_time": "2020-10-30T10:55:12.139304Z"
-    }
-   },
-   "outputs": [
-    {
-     "ename": "NameError",
-     "evalue": "name 'anymore' is not defined",
-     "output_type": "error",
-     "traceback": [
-      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
-      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
-      "\u001b[1;32m<ipython-input-1-8e7a5bdb8a47>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mEDIT\u001b[0m\u001b[1;33m:\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0manymore\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
-      "\u001b[1;31mNameError\u001b[0m: name 'anymore' is not defined"
-     ]
-    }
-   ],
-   "source": [
-    "EDIT: not anymore"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 51,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from polytope import Polytope"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "A Polytope is an object defined to represent one or several musical bars, in the context of structural segmentation.\n",
-    "\n",
-    "Hence, it is defined by several chords."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 52,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[<class 'chord.Chord'>(Symbol: 'Ab', Notes: [<class 'note.Note'>(Symbol: 'Ab', Number: 8), <class 'note.Note'>(Symbol: 'C', Number: 0), <class 'note.Note'>(Symbol: 'Eb', Number: 3)]),\n",
-       " <class 'chord.Chord'>(Symbol: 'Ab', Notes: [<class 'note.Note'>(Symbol: 'Ab', Number: 8), <class 'note.Note'>(Symbol: 'C', Number: 0), <class 'note.Note'>(Symbol: 'Eb', Number: 3)]),\n",
-       " <class 'chord.Chord'>(Symbol: 'Ab', Notes: [<class 'note.Note'>(Symbol: 'Ab', Number: 8), <class 'note.Note'>(Symbol: 'C', Number: 0), <class 'note.Note'>(Symbol: 'Eb', Number: 3)]),\n",
-       " <class 'chord.Chord'>(Symbol: 'Ab', Notes: [<class 'note.Note'>(Symbol: 'Ab', Number: 8), <class 'note.Note'>(Symbol: 'C', Number: 0), <class 'note.Note'>(Symbol: 'Eb', Number: 3)]),\n",
-       " <class 'chord.Chord'>(Symbol: 'Gm', Notes: [<class 'note.Note'>(Symbol: 'G', Number: 7), <class 'note.Note'>(Symbol: 'Bb', Number: 10), <class 'note.Note'>(Symbol: 'D', Number: 2)]),\n",
-       " <class 'chord.Chord'>(Symbol: 'Gm', Notes: [<class 'note.Note'>(Symbol: 'G', Number: 7), <class 'note.Note'>(Symbol: 'Bb', Number: 10), <class 'note.Note'>(Symbol: 'D', Number: 2)]),\n",
-       " <class 'chord.Chord'>(Symbol: 'Gm', Notes: [<class 'note.Note'>(Symbol: 'G', Number: 7), <class 'note.Note'>(Symbol: 'Bb', Number: 10), <class 'note.Note'>(Symbol: 'D', Number: 2)]),\n",
-       " <class 'chord.Chord'>(Symbol: 'Gm', Notes: [<class 'note.Note'>(Symbol: 'G', Number: 7), <class 'note.Note'>(Symbol: 'Bb', Number: 10), <class 'note.Note'>(Symbol: 'D', Number: 2)]),\n",
-       " <class 'chord.Chord'>(Symbol: 'Ab', Notes: [<class 'note.Note'>(Symbol: 'Ab', Number: 8), <class 'note.Note'>(Symbol: 'C', Number: 0), <class 'note.Note'>(Symbol: 'Eb', Number: 3)]),\n",
-       " <class 'chord.Chord'>(Symbol: 'Ab', Notes: [<class 'note.Note'>(Symbol: 'Ab', Number: 8), <class 'note.Note'>(Symbol: 'C', Number: 0), <class 'note.Note'>(Symbol: 'Eb', Number: 3)]),\n",
-       " <class 'chord.Chord'>(Symbol: 'Ab', Notes: [<class 'note.Note'>(Symbol: 'Ab', Number: 8), <class 'note.Note'>(Symbol: 'C', Number: 0), <class 'note.Note'>(Symbol: 'Eb', Number: 3)]),\n",
-       " <class 'chord.Chord'>(Symbol: 'Ab', Notes: [<class 'note.Note'>(Symbol: 'Ab', Number: 8), <class 'note.Note'>(Symbol: 'C', Number: 0), <class 'note.Note'>(Symbol: 'Eb', Number: 3)]),\n",
-       " <class 'chord.Chord'>(Symbol: 'Bbm', Notes: [<class 'note.Note'>(Symbol: 'Bb', Number: 10), <class 'note.Note'>(Symbol: 'Db', Number: 1), <class 'note.Note'>(Symbol: 'F', Number: 5)]),\n",
-       " <class 'chord.Chord'>(Symbol: 'Bbm', Notes: [<class 'note.Note'>(Symbol: 'Bb', Number: 10), <class 'note.Note'>(Symbol: 'Db', Number: 1), <class 'note.Note'>(Symbol: 'F', Number: 5)]),\n",
-       " <class 'chord.Chord'>(Symbol: 'Eb', Notes: [<class 'note.Note'>(Symbol: 'Eb', Number: 3), <class 'note.Note'>(Symbol: 'G', Number: 7), <class 'note.Note'>(Symbol: 'Bb', Number: 10)]),\n",
-       " <class 'chord.Chord'>(Symbol: 'Eb', Notes: [<class 'note.Note'>(Symbol: 'Eb', Number: 3), <class 'note.Note'>(Symbol: 'G', Number: 7), <class 'note.Note'>(Symbol: 'Bb', Number: 10)])]"
-      ]
-     },
-     "execution_count": 52,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "some_chords = [[8, 0, 3], [8, 0, 3], [8, 0, 3], [8, 0, 3], [7, 10, 2], [7, 10, 2], [7, 10, 2], [7, 10, 2], [8, 0, 3], [8, 0, 3], [8, 0, 3], [8, 0, 3], [10, 1, 5], [10, 1, 5], [3, 7, 10], [3, 7, 10]]\n",
-    "polytope = Polytope(some_chords)\n",
-    "polytope.chords"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "To facilitates the visualization of polytopes, when they contain 16 elements, a 4 by 4 visualization function has been implemented."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 53,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "16"
-      ]
-     },
-     "execution_count": 53,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "polytope.get_length()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 54,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "0 [8, 0, 3] 1 [8, 0, 3] \n",
-      "2 [8, 0, 3] 3 [8, 0, 3] \n",
-      "\n",
-      "4 [7, 10, 2] 5 [7, 10, 2] \n",
-      "6 [7, 10, 2] 7 [7, 10, 2] \n",
-      "\n",
-      "8 [8, 0, 3] 9 [8, 0, 3] \n",
-      "10 [8, 0, 3] 11 [8, 0, 3] \n",
-      "\n",
-      "12 [10, 1, 5] 13 [10, 1, 5] \n",
-      "14 [3, 7, 10] 15 [3, 7, 10] \n",
-      "\n"
-     ]
-    }
-   ],
-   "source": [
-    "polytope.pretty_print()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 55,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "0 Ab 1 Ab \n",
-      "2 Ab 3 Ab \n",
-      "\n",
-      "4 Gm 5 Gm \n",
-      "6 Gm 7 Gm \n",
-      "\n",
-      "8 Ab 9 Ab \n",
-      "10 Ab 11 Ab \n",
-      "\n",
-      "12 Bbm 13 Bbm \n",
-      "14 Eb 15 Eb \n",
-      "\n"
-     ]
-    }
-   ],
-   "source": [
-    "polytope.pretty_print(symbols = True)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "It is also possible to access to the chords of a polytope as a list of Chord symbols or by lists of the note numbers:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 56,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "['Ab',\n",
-       " 'Ab',\n",
-       " 'Ab',\n",
-       " 'Ab',\n",
-       " 'Gm',\n",
-       " 'Gm',\n",
-       " 'Gm',\n",
-       " 'Gm',\n",
-       " 'Ab',\n",
-       " 'Ab',\n",
-       " 'Ab',\n",
-       " 'Ab',\n",
-       " 'Bbm',\n",
-       " 'Bbm',\n",
-       " 'Eb',\n",
-       " 'Eb']"
-      ]
-     },
-     "execution_count": 56,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "polytope.get_list_of_symbols()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 57,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[[8, 0, 3],\n",
-       " [8, 0, 3],\n",
-       " [8, 0, 3],\n",
-       " [8, 0, 3],\n",
-       " [7, 10, 2],\n",
-       " [7, 10, 2],\n",
-       " [7, 10, 2],\n",
-       " [7, 10, 2],\n",
-       " [8, 0, 3],\n",
-       " [8, 0, 3],\n",
-       " [8, 0, 3],\n",
-       " [8, 0, 3],\n",
-       " [10, 1, 5],\n",
-       " [10, 1, 5],\n",
-       " [3, 7, 10],\n",
-       " [3, 7, 10]]"
-      ]
-     },
-     "execution_count": 57,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "polytope.get_list_of_numbers()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "One of the interest of the polytopical paradigm is to reorder the elements in a non sequential way.\n",
-    "\n",
-    "In that context, a promising framework, developed in [Louboutin 2017], is the \"Primer Preseving Permutation\" system, or PPP. Here, it is possible to obtain the ppp of a polytope with the methods:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 58,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[[8, 0, 3],\n",
-       " [8, 0, 3],\n",
-       " [7, 10, 2],\n",
-       " [7, 10, 2],\n",
-       " [8, 0, 3],\n",
-       " [8, 0, 3],\n",
-       " [7, 10, 2],\n",
-       " [7, 10, 2],\n",
-       " [8, 0, 3],\n",
-       " [8, 0, 3],\n",
-       " [10, 1, 5],\n",
-       " [10, 1, 5],\n",
-       " [8, 0, 3],\n",
-       " [8, 0, 3],\n",
-       " [3, 7, 10],\n",
-       " [3, 7, 10]]"
-      ]
-     },
-     "execution_count": 58,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "polytope.get_ppp(1).get_list_of_numbers() # The argument is the index of the desired ppp."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 59,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[<polytop.Polytop at 0x23b26514808>,\n",
-       " <polytop.Polytop at 0x23b26514908>,\n",
-       " <polytop.Polytop at 0x23b26514f08>,\n",
-       " <polytop.Polytop at 0x23b26514608>,\n",
-       " <polytop.Polytop at 0x23b26514548>,\n",
-       " <polytop.Polytop at 0x23b26514208>]"
-      ]
-     },
-     "execution_count": 59,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "polytope.get_all_ppps()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 60,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "['Ab',\n",
-       " 'Ab',\n",
-       " 'Ab',\n",
-       " 'Ab',\n",
-       " 'Ab',\n",
-       " 'Ab',\n",
-       " 'Ab',\n",
-       " 'Ab',\n",
-       " 'Gm',\n",
-       " 'Gm',\n",
-       " 'Bbm',\n",
-       " 'Bbm',\n",
-       " 'Gm',\n",
-       " 'Gm',\n",
-       " 'Eb',\n",
-       " 'Eb']"
-      ]
-     },
-     "execution_count": 60,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "polytope.get_all_ppps()[3].get_list_of_symbols()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Finally, it is also possible to add a Chord to a polytope."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 61,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "17"
-      ]
-     },
-     "execution_count": 61,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "polytope.add_chord('Abmin')\n",
-    "polytope.get_length()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 62,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[[8, 0, 3],\n",
-       " [8, 0, 3],\n",
-       " [8, 0, 3],\n",
-       " [8, 0, 3],\n",
-       " [7, 10, 2],\n",
-       " [7, 10, 2],\n",
-       " [7, 10, 2],\n",
-       " [7, 10, 2],\n",
-       " [8, 0, 3],\n",
-       " [8, 0, 3],\n",
-       " [8, 0, 3],\n",
-       " [8, 0, 3],\n",
-       " [10, 1, 5],\n",
-       " [10, 1, 5],\n",
-       " [3, 7, 10],\n",
-       " [3, 7, 10],\n",
-       " [8, 11, 3]]"
-      ]
-     },
-     "execution_count": 62,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "polytope.get_list_of_numbers()"
-   ]
-  },
-  {
-   "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.7.5"
-  },
-  "toc": {
-   "base_numbering": 1,
-   "nav_menu": {},
-   "number_sections": true,
-   "sideBar": true,
-   "skip_h1_title": false,
-   "title_cell": "Table of Contents",
-   "title_sidebar": "Contents",
-   "toc_cell": false,
-   "toc_position": {},
-   "toc_section_display": true,
-   "toc_window_display": false
-  },
-  "varInspector": {
-   "cols": {
-    "lenName": 16,
-    "lenType": 16,
-    "lenVar": 40
-   },
-   "kernels_config": {
-    "python": {
-     "delete_cmd_postfix": "",
-     "delete_cmd_prefix": "del ",
-     "library": "var_list.py",
-     "varRefreshCmd": "print(var_dic_list())"
-    },
-    "r": {
-     "delete_cmd_postfix": ") ",
-     "delete_cmd_prefix": "rm(",
-     "library": "var_list.r",
-     "varRefreshCmd": "cat(var_dic_list()) "
-    }
-   },
-   "types_to_exclude": [
-    "module",
-    "function",
-    "builtin_function_or_method",
-    "instance",
-    "_Feature"
-   ],
-   "window_display": false
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}