{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Updating ../counters/C00008.md\n",
      "Updating ../counters/C00009.md\n",
      "Updating ../counters/C00011.md\n",
      "Updating ../counters/C00012.md\n",
      "Updating ../counters/C00014.md\n",
      "Updating ../counters/C00016.md\n",
      "Updating ../counters/C00020.md\n",
      "Updating ../counters/C00022.md\n",
      "Updating ../counters/C00023.md\n",
      "Updating ../counters/C00024.md\n",
      "Updating ../counters/C00025.md\n",
      "Updating ../counters/C00026.md\n",
      "Updating ../counters/C00027.md\n",
      "Updating ../counters/C00031.md\n",
      "Updating ../counters/C00036.md\n",
      "Updating ../counters/C00039.md\n",
      "Updating ../counters/C00040.md\n",
      "Updating ../counters/C00042.md\n",
      "Updating ../counters/C00043.md\n",
      "Updating ../counters/C00044.md\n",
      "Updating ../counters/C00045.md\n",
      "Updating ../counters/C00048.md\n",
      "Updating ../counters/C00049.md\n",
      "Updating ../counters/C00050.md\n",
      "Updating ../counters/C00051.md\n",
      "Updating ../counters/C00052.md\n",
      "Updating ../counters/C00053.md\n",
      "Updating ../counters/C00055.md\n",
      "Updating ../counters/C00060.md\n",
      "Updating ../counters/C00063.md\n",
      "Updating ../counters/C00065.md\n",
      "Updating ../counters/C00066.md\n",
      "Updating ../counters/C00067.md\n",
      "Updating ../counters/C00068.md\n",
      "Updating ../counters/C00069.md\n",
      "Updating ../counters/C00070.md\n",
      "Updating ../counters/C00071.md\n",
      "Updating ../counters/C00072.md\n",
      "Updating ../counters/C00073.md\n",
      "Updating ../counters/C00074.md\n",
      "Updating ../counters/C00076.md\n",
      "Updating ../counters/C00078.md\n",
      "Updating ../counters/C00079.md\n",
      "Updating ../counters/C00088.md\n",
      "Updating ../counters/C00089.md\n",
      "Updating ../counters/C00090.md\n",
      "Updating ../counters/C00091.md\n",
      "Updating ../counters/C00092.md\n",
      "Updating ../counters/C00093.md\n",
      "Updating ../counters/C00094.md\n",
      "Updating ../counters/C00095.md\n",
      "Updating ../counters/C00096.md\n",
      "Updating ../counters/C00097.md\n",
      "Updating ../counters/C00098.md\n",
      "Updating ../counters/C00099.md\n",
      "Updating ../counters/C00101.md\n",
      "Updating ../counters/C00102.md\n",
      "Updating ../counters/C00103.md\n",
      "Updating ../counters/C00107.md\n",
      "Updating ../counters/C00112.md\n",
      "Updating ../counters/C00113.md\n",
      "Updating ../counters/C00114.md\n",
      "Updating ../counters/C00115.md\n",
      "Updating ../counters/C00116.md\n",
      "Updating ../counters/C00117.md\n",
      "Updating ../counters/C00118.md\n",
      "Updating ../counters/C00119.md\n",
      "Updating ../counters/C00120.md\n",
      "Updating ../counters/C00121.md\n",
      "Updating ../counters/C00123.md\n",
      "Updating ../counters/C00126.md\n",
      "Updating ../counters/C00129.md\n",
      "Updating ../counters/C00131.md\n",
      "Updating ../counters/C00133.md\n",
      "Updating ../counters/C00135.md\n",
      "Updating ../counters/C00136.md\n",
      "Updating ../counters/C00137.md\n",
      "Updating ../counters/C00144.md\n",
      "Updating ../counters/C00145.md\n",
      "Updating ../counters/C00147.md\n",
      "Updating ../counters/C00149.md\n",
      "Updating ../counters/C00202.md\n",
      "Updating ../counters/C00210.md\n",
      "updated ../incidents_list.md\n",
      "updated ../amitt_red_framework.md\n",
      "updated ../amitt_red_framework_clickable.html\n",
      "Writing ../counter_tactics/TA01counters.md\n",
      "Writing ../counter_tactics/TA02counters.md\n",
      "Writing ../counter_tactics/TA03counters.md\n",
      "Writing ../counter_tactics/TA04counters.md\n",
      "Writing ../counter_tactics/TA05counters.md\n",
      "Writing ../counter_tactics/TA06counters.md\n",
      "Writing ../counter_tactics/TA07counters.md\n",
      "Writing ../counter_tactics/TA08counters.md\n",
      "Writing ../counter_tactics/TA09counters.md\n",
      "Writing ../counter_tactics/TA10counters.md\n",
      "Writing ../counter_tactics/TA11counters.md\n",
      "Writing ../counter_tactics/TA12counters.md\n",
      "updated ../tactics_by_responsetype_table.md\n",
      "Writing metatechniques/cleaningcounters.md\n",
      "Writing metatechniques/countermessagingcounters.md\n",
      "Writing metatechniques/data pollutioncounters.md\n",
      "Writing metatechniques/daylightcounters.md\n",
      "Writing metatechniques/dilutioncounters.md\n",
      "Writing metatechniques/diversioncounters.md\n",
      "Writing metatechniques/frictioncounters.md\n",
      "Writing metatechniques/metatechniquecounters.md\n",
      "Writing metatechniques/reduce resourcescounters.md\n",
      "Writing metatechniques/removalcounters.md\n",
      "Writing metatechniques/resiliencecounters.md\n",
      "Writing metatechniques/scoringcounters.md\n",
      "Writing metatechniques/targetingcounters.md\n",
      "Writing metatechniques/verificationcounters.md\n",
      "updated ../metatechniques_by_responsetype_table.md\n",
      "Writing ../resources_needed/DHScounters.md\n",
      "Writing ../resources_needed/NGOcounters.md\n",
      "Writing ../resources_needed/activistscounters.md\n",
      "Writing ../resources_needed/adtechcounters.md\n",
      "Writing ../resources_needed/civil_societycounters.md\n",
      "Writing ../resources_needed/community_groupscounters.md\n",
      "Writing ../resources_needed/companiescounters.md\n",
      "Writing ../resources_needed/content_creatorscounters.md\n",
      "Writing ../resources_needed/data_scientistcounters.md\n",
      "Writing ../resources_needed/datastreamscounters.md\n",
      "Writing ../resources_needed/developerscounters.md\n",
      "Writing ../resources_needed/educatorscounters.md\n",
      "Writing ../resources_needed/elvescounters.md\n",
      "Writing ../resources_needed/factcheckerscounters.md\n",
      "Writing ../resources_needed/fundingcounters.md\n",
      "Writing ../resources_needed/gamesdesignerscounters.md\n",
      "Writing ../resources_needed/governmentcounters.md\n",
      "Writing ../resources_needed/government:policymakerscounters.md\n",
      "Writing ../resources_needed/influencerscounters.md\n",
      "Writing ../resources_needed/influencers:trusted_authoritycounters.md\n",
      "Writing ../resources_needed/infoseccounters.md\n",
      "Writing ../resources_needed/librariescounters.md\n",
      "Writing ../resources_needed/mediacounters.md\n",
      "Writing ../resources_needed/militarycounters.md\n",
      "Writing ../resources_needed/moneycounters.md\n",
      "Writing ../resources_needed/platform_admincounters.md\n",
      "Writing ../resources_needed/platform_admin:adtechcounters.md\n",
      "Writing ../resources_needed/platform_admin:fundingsitescounters.md\n",
      "Writing ../resources_needed/platform_admin:socialmediacounters.md\n",
      "Writing ../resources_needed/platform_algorithmscounters.md\n",
      "Writing ../resources_needed/platform_outreachcounters.md\n",
      "Writing ../resources_needed/platformscounters.md\n",
      "Writing ../resources_needed/publiccounters.md\n",
      "Writing ../resources_needed/public:account_ownerscounters.md\n",
      "Writing ../resources_needed/religious_organisationscounters.md\n",
      "Writing ../resources_needed/schoolscounters.md\n",
      "Writing ../resources_needed/server_admincounters.md\n",
      "updated ../resources_by_responsetype_table.md\n"
     ]
    }
   ],
   "source": [
    "from generate_amitt_ttps import Amitt\n",
    "amitt = Amitt()\n",
    "amitt.generate_and_write_datafiles()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "vars(amitt)['tactics']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "vars(amitt).keys()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "###. TEST AREA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def create_tactic_counters_string(tactic_id):\n",
    "    table_string = '''\n",
    "| Response types | Counters |\n",
    "| -------------- | -------- |\n",
    "'''\n",
    "    tactic_counters = amitt.df_counters[amitt.df_counters['tactic_id']==tactic_id]\n",
    "    row_string = '| {0} | [{1} {2}](../counters/{1}.md) |\\n'\n",
    "    for index, row in tactic_counters.sort_values(['responsetype', 'id']).iterrows():\n",
    "        table_string += row_string.format(row['responsetype'], row['id'], row['name'])\n",
    "    return table_string\n",
    "\n",
    "\n",
    "def create_technique_counters_string(technique_id):\n",
    "    table_string = '''\n",
    "| Counters |\n",
    "| -------- |\n",
    "'''\n",
    "    technique_counters = amitt.cross_counterid_techniqueid[amitt.cross_counterid_techniqueid['technique_id']==technique_id]\n",
    "    technique_counters = pd.merge(technique_counters, amitt.df_counters[['id', 'name']])\n",
    "    row_string = '| [{0} {1}](../counters/{0}.md) |\\n'\n",
    "    for index, row in technique_counters.sort_values('id').iterrows():\n",
    "        table_string += row_string.format(row['id'], row['name'])\n",
    "    return table_string\n",
    "\n",
    "create_technique_counters_string('TA01')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "amitt.df_counters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "amitt.cross_counterid_techniqueid[amitt.cross_counterid_techniqueid['technique_id'] == 'T0006']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "amitt.cross_counterid_techniqueid"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "technique_id='T0006'\n",
    "xx = amitt.cross_counterid_techniqueid[amitt.cross_counterid_techniqueid['technique_id']==technique_id]\n",
    "pd.merge(xx, amitt.df_counters[['id', 'name']])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "tactics=self.create_counter_tactics_string(row['id'])\n",
    "techniques=self.create_counter_techniques_string(row['id'])\n",
    "incidents=self.create_counter_incidents_string(row['id'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pd.pivot_table(amitt.df_counters[['tactic_id', 'responsetype','id']], index='responsetype', columns='tactic_id', aggfunc=len, fill_value=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "
\n",
       "\n",
       "
\n",
       "  \n",
       "    \n",
       "      | \n",
       " | id\n",
       " | technique_id\n",
       " | 
\n",
       "  \n",
       "  \n",
       "    \n",
       "      | 6\n",
       " | C00008\n",
       " | TA01\n",
       " | 
\n",
       "    \n",
       "      | 6\n",
       " | C00008\n",
       " | TA06\n",
       " | 
\n",
       "    \n",
       "      | 6\n",
       " | C00008\n",
       " | TA08\n",
       " | 
\n",
       "    \n",
       "      | 6\n",
       " | C00008\n",
       " | T0006\n",
       " | 
\n",
       "    \n",
       "      | 6\n",
       " | C00008\n",
       " | T0009\n",
       " | 
\n",
       "    \n",
       "      | ...\n",
       " | ...\n",
       " | ...\n",
       " | 
\n",
       "    \n",
       "      | 182\n",
       " | C00145\n",
       " | T0015\n",
       " | 
\n",
       "    \n",
       "      | 182\n",
       " | C00145\n",
       " | T0046\n",
       " | 
\n",
       "    \n",
       "      | 183\n",
       " | C00147\n",
       " | T0060\n",
       " | 
\n",
       "    \n",
       "      | 185\n",
       " | C00149\n",
       " | TA12\n",
       " | 
\n",
       "    \n",
       "      | 185\n",
       " | C00149\n",
       " | T0020\n",
       " | 
\n",
       "  \n",
       "
\n",
       "
283 rows × 2 columns
\n",
       "
\n",
       "\n",
       "
\n",
       "  \n",
       "    \n",
       "      | \n",
       " | id\n",
       " | technique_id\n",
       " | 
\n",
       "  \n",
       "  \n",
       "    \n",
       "      | 182\n",
       " | C00145\n",
       " | T0015\n",
       " | 
\n",
       "    \n",
       "      | 182\n",
       " | C00145\n",
       " | T0046\n",
       " | 
\n",
       "  \n",
       "
\n",
       "
\n",
       "\n",
       "
\n",
       "  \n",
       "    \n",
       "      | \n",
       " | id\n",
       " | name\n",
       " | 
\n",
       "  \n",
       "  \n",
       "    \n",
       "      | 0\n",
       " | T0001\n",
       " | 5Ds (dismiss, distort, distract, dismay, divide)\n",
       " | 
\n",
       "    \n",
       "      | 1\n",
       " | T0002\n",
       " | Facilitate State Propaganda\n",
       " | 
\n",
       "    \n",
       "      | 2\n",
       " | T0003\n",
       " | Leverage Existing Narratives\n",
       " | 
\n",
       "    \n",
       "      | 3\n",
       " | T0004\n",
       " | Competing Narratives\n",
       " | 
\n",
       "    \n",
       "      | 4\n",
       " | T0005\n",
       " | Center of Gravity Analysis\n",
       " | 
\n",
       "    \n",
       "      | ...\n",
       " | ...\n",
       " | ...\n",
       " | 
\n",
       "    \n",
       "      | 56\n",
       " | T0057\n",
       " | Organise remote rallies and events\n",
       " | 
\n",
       "    \n",
       "      | 57\n",
       " | T0058\n",
       " | Legacy web content\n",
       " | 
\n",
       "    \n",
       "      | 58\n",
       " | T0059\n",
       " | Play the long game\n",
       " | 
\n",
       "    \n",
       "      | 59\n",
       " | T0060\n",
       " | Continue to amplify\n",
       " | 
\n",
       "    \n",
       "      | 60\n",
       " | T0061\n",
       " | Sell merchandising\n",
       " | 
\n",
       "  \n",
       "
\n",
       "
61 rows × 2 columns
\n",
       "
\n",
       "\n",
       "
\n",
       "  \n",
       "    \n",
       "      | \n",
       " | id\n",
       " | technique_id\n",
       " | name\n",
       " | 
\n",
       "  \n",
       "  \n",
       "    \n",
       "      | 0\n",
       " | C00145\n",
       " | T0015\n",
       " | Create hashtag\n",
       " | 
\n",
       "    \n",
       "      | 1\n",
       " | C00145\n",
       " | T0046\n",
       " | Search Engine Optimization\n",
       " | 
\n",
       "  \n",
       "
\n",
       "
\n",
       "\n",
       "
\n",
       "  \n",
       "    \n",
       "      | \n",
       " | technique_id\n",
       " | name\n",
       " | 
\n",
       "  \n",
       "  \n",
       "    \n",
       "      | 0\n",
       " | T0001\n",
       " | 5Ds (dismiss, distort, distract, dismay, divide)\n",
       " | 
\n",
       "    \n",
       "      | 1\n",
       " | T0002\n",
       " | Facilitate State Propaganda\n",
       " | 
\n",
       "    \n",
       "      | 2\n",
       " | T0003\n",
       " | Leverage Existing Narratives\n",
       " | 
\n",
       "    \n",
       "      | 3\n",
       " | T0004\n",
       " | Competing Narratives\n",
       " | 
\n",
       "    \n",
       "      | 4\n",
       " | T0005\n",
       " | Center of Gravity Analysis\n",
       " | 
\n",
       "    \n",
       "      | ...\n",
       " | ...\n",
       " | ...\n",
       " | 
\n",
       "    \n",
       "      | 56\n",
       " | T0057\n",
       " | Organise remote rallies and events\n",
       " | 
\n",
       "    \n",
       "      | 57\n",
       " | T0058\n",
       " | Legacy web content\n",
       " | 
\n",
       "    \n",
       "      | 58\n",
       " | T0059\n",
       " | Play the long game\n",
       " | 
\n",
       "    \n",
       "      | 59\n",
       " | T0060\n",
       " | Continue to amplify\n",
       " | 
\n",
       "    \n",
       "      | 60\n",
       " | T0061\n",
       " | Sell merchandising\n",
       " | 
\n",
       "  \n",
       "
\n",
       "
61 rows × 2 columns
\n",
       "
\n",
       "\n",
       "
\n",
       "  \n",
       "    \n",
       "      | \n",
       " | id\n",
       " | name\n",
       " | 
\n",
       "  \n",
       "  \n",
       "    \n",
       "      | 14\n",
       " | T0015\n",
       " | Create hashtag\n",
       " | 
\n",
       "  \n",
       "
\n",
       "