{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "from generate_amitt_ttps import Amitt\n",
    "amitt = Amitt()\n",
    "amitt.update_markdown_files()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "updated ../matrix.md\n",
      "updated ../incidents.md\n",
      "updated ../matrix_to_message.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 ../counter_tactic_counts.md\n",
      "Writing ../counters_metatag/cleaningcounters.md\n",
      "Writing ../counters_metatag/countermessagingcounters.md\n",
      "Writing ../counters_metatag/data pollutioncounters.md\n",
      "Writing ../counters_metatag/daylightcounters.md\n",
      "Writing ../counters_metatag/dilutioncounters.md\n",
      "Writing ../counters_metatag/diversioncounters.md\n",
      "Writing ../counters_metatag/frictioncounters.md\n",
      "Writing ../counters_metatag/metatechniquecounters.md\n",
      "Writing ../counters_metatag/reduce resourcescounters.md\n",
      "Writing ../counters_metatag/removalcounters.md\n",
      "Writing ../counters_metatag/resiliencecounters.md\n",
      "Writing ../counters_metatag/scoringcounters.md\n",
      "Writing ../counters_metatag/targetingcounters.md\n",
      "Writing ../counters_metatag/verificationcounters.md\n",
      "updated ../counter_metatag_counts.md\n",
      "Writing ../counter_resource/DHScounters.md\n",
      "Writing ../counter_resource/NGOcounters.md\n",
      "Writing ../counter_resource/activistscounters.md\n",
      "Writing ../counter_resource/adtechcounters.md\n",
      "Writing ../counter_resource/civil_societycounters.md\n",
      "Writing ../counter_resource/community_groupscounters.md\n",
      "Writing ../counter_resource/companiescounters.md\n",
      "Writing ../counter_resource/content_creatorscounters.md\n",
      "Writing ../counter_resource/data_scientistcounters.md\n",
      "Writing ../counter_resource/datastreamscounters.md\n",
      "Writing ../counter_resource/developerscounters.md\n",
      "Writing ../counter_resource/educatorscounters.md\n",
      "Writing ../counter_resource/elvescounters.md\n",
      "Writing ../counter_resource/factcheckerscounters.md\n",
      "Writing ../counter_resource/fundingcounters.md\n",
      "Writing ../counter_resource/gamesdesignerscounters.md\n",
      "Writing ../counter_resource/governmentcounters.md\n",
      "Writing ../counter_resource/government:policymakerscounters.md\n",
      "Writing ../counter_resource/influencerscounters.md\n",
      "Writing ../counter_resource/influencers:trusted_authoritycounters.md\n",
      "Writing ../counter_resource/infoseccounters.md\n",
      "Writing ../counter_resource/librariescounters.md\n",
      "Writing ../counter_resource/mediacounters.md\n",
      "Writing ../counter_resource/militarycounters.md\n",
      "Writing ../counter_resource/moneycounters.md\n",
      "Writing ../counter_resource/platform_admincounters.md\n",
      "Writing ../counter_resource/platform_admin:adtechcounters.md\n",
      "Writing ../counter_resource/platform_admin:fundingsitescounters.md\n",
      "Writing ../counter_resource/platform_admin:socialmediacounters.md\n",
      "Writing ../counter_resource/platform_algorithmscounters.md\n",
      "Writing ../counter_resource/platform_outreachcounters.md\n",
      "Writing ../counter_resource/platformscounters.md\n",
      "Writing ../counter_resource/publiccounters.md\n",
      "Writing ../counter_resource/public:account_ownerscounters.md\n",
      "Writing ../counter_resource/religious_organisationscounters.md\n",
      "Writing ../counter_resource/schoolscounters.md\n",
      "Writing ../counter_resource/server_admincounters.md\n",
      "updated ../counter_resource_counts.md\n"
     ]
    }
   ],
   "source": [
    "amitt.write_grid_markdown()\n",
    "amitt.write_incidentlist_markdown()\n",
    "amitt.write_grid_message_generator()\n",
    "amitt.write_counters_tactics_markdown()\n",
    "amitt.write_counters_metacounts_markdown()\n",
    "amitt.write_counters_resource_markdown()"
   ]
  },
  {
   "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": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\"\\n| Counters |\\n| -------- |\\n| [C00008 Create shared fact-checking database](../counters/C00008.md) |\\n| [C00014 Real-time updates to fact-checking database](../counters/C00014.md) |\\n| [C00015 Reputation scores for social media users](../counters/C00015.md) |\\n| [C00023 Promote civility as an identity that people will defend](../counters/C00023.md) |\\n| [C00024 Promote constructive narratives i.e. not polarising.  Pro-life, pro-choice, or pro-USA?](../counters/C00024.md) |\\n| [C00025 Promote identity neutral narratives](../counters/C00025.md) |\\n| [C00073 Educate on how to handle info pollution. Push out targeted education on why it's pollution](../counters/C00073.md) |\\n\""
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "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": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "
\n",
       "\n",
       "
\n",
       "  \n",
       "    \n",
       "      | \n",
       " | id\n",
       " | name\n",
       " | metatechnique\n",
       " | summary\n",
       " | playbooks\n",
       " | resources_needed\n",
       " | how_found\n",
       " | references\n",
       " | incident_ids\n",
       " | tactic\n",
       " | responsetype\n",
       " | notes\n",
       " | techniques\n",
       " | longname\n",
       " | tactic_id\n",
       " | tactic_name\n",
       " | 
\n",
       "  \n",
       "  \n",
       "    \n",
       "      | 0\n",
       " | C00001\n",
       " | Better models of info spread up the layers\n",
       " | metatechnique\n",
       " | NaN\n",
       " | NaN\n",
       " | NaN\n",
       " | 2019-11-workshop\n",
       " | NaN\n",
       " | NaN\n",
       " | TA01 Strategic Planning\n",
       " | ALL\n",
       " | NaN\n",
       " | NaN\n",
       " | C00001 - Better models of info spread up the l...\n",
       " | TA01\n",
       " | Strategic Planning\n",
       " | 
\n",
       "    \n",
       "      | 1\n",
       " | C00003\n",
       " | How can we safeguard against extremists using ...\n",
       " | metatechnique\n",
       " | NaN\n",
       " | NaN\n",
       " | NaN\n",
       " | 2019-11-workshop\n",
       " | NaN\n",
       " | NaN\n",
       " | TA01 Strategic Planning\n",
       " | ALL\n",
       " | NaN\n",
       " | NaN\n",
       " | C00003 - How can we safeguard against extremis...\n",
       " | TA01\n",
       " | Strategic Planning\n",
       " | 
\n",
       "    \n",
       "      | 2\n",
       " | C00004\n",
       " | Managing like a chronic disease\n",
       " | metatechnique\n",
       " | NaN\n",
       " | NaN\n",
       " | NaN\n",
       " | 2019-11-workshop\n",
       " | NaN\n",
       " | NaN\n",
       " | TA01 Strategic Planning\n",
       " | ALL\n",
       " | NaN\n",
       " | NaN\n",
       " | C00004 - Managing like a chronic disease\n",
       " | TA01\n",
       " | Strategic Planning\n",
       " | 
\n",
       "    \n",
       "      | 3\n",
       " | C00005\n",
       " | Policy: makers, terminology, elements: a) broa...\n",
       " | metatechnique\n",
       " | NaN\n",
       " | NaN\n",
       " | NaN\n",
       " | 2019-11-workshop\n",
       " | NaN\n",
       " | NaN\n",
       " | TA01 Strategic Planning\n",
       " | ALL\n",
       " | NaN\n",
       " | NaN\n",
       " | C00005 - Policy: makers, terminology, elements...\n",
       " | TA01\n",
       " | Strategic Planning\n",
       " | 
\n",
       "    \n",
       "      | 4\n",
       " | C00006\n",
       " | Charge for social media\n",
       " | friction\n",
       " | No corresponding AMITT technique.\n",
       " | NaN\n",
       " | platform_admin:socialmedia\n",
       " | 2019-11-workshop\n",
       " | NaN\n",
       " | NaN\n",
       " | TA01 Strategic Planning\n",
       " | D2 Deny\n",
       " | NaN\n",
       " | NaN\n",
       " | C00006 - Charge for social media\n",
       " | TA01\n",
       " | Strategic Planning\n",
       " | 
\n",
       "    \n",
       "      | ...\n",
       " | ...\n",
       " | ...\n",
       " | ...\n",
       " | ...\n",
       " | ...\n",
       " | ...\n",
       " | ...\n",
       " | ...\n",
       " | ...\n",
       " | ...\n",
       " | ...\n",
       " | ...\n",
       " | ...\n",
       " | ...\n",
       " | ...\n",
       " | ...\n",
       " | 
\n",
       "    \n",
       "      | 132\n",
       " | C00215\n",
       " | Use fraud legislation to clean up social media\n",
       " | metatechnique\n",
       " | NaN\n",
       " | NaN\n",
       " | government:policymakers\n",
       " | 2019-11-workshop\n",
       " | NaN\n",
       " | NaN\n",
       " | TA07 Channel Selection\n",
       " | D3 Disrupt\n",
       " | NaN\n",
       " | NaN\n",
       " | C00215 - Use fraud legislation to clean up soc...\n",
       " | TA07\n",
       " | Channel Selection\n",
       " | 
\n",
       "    \n",
       "      | 82\n",
       " | C00216\n",
       " | Use advertiser controls to stem flow of funds ...\n",
       " | reduce resources\n",
       " | NaN\n",
       " | NaN\n",
       " | platform_admin:adtech\n",
       " | 2019-11-workshop\n",
       " | NaN\n",
       " | NaN\n",
       " | TA05 Microtargeting\n",
       " | D2 Deny\n",
       " | NaN\n",
       " | NaN\n",
       " | C00216 - Use advertiser controls to stem flow ...\n",
       " | TA05\n",
       " | Microtargeting\n",
       " | 
\n",
       "    \n",
       "      | 133\n",
       " | C00217\n",
       " | Registries alert when large batches of newsy U...\n",
       " | daylight\n",
       " | NaN\n",
       " | NaN\n",
       " | platform_admin\n",
       " | grugq\n",
       " | NaN\n",
       " | NaN\n",
       " | TA07 Channel Selection\n",
       " | D2 Deny\n",
       " | NaN\n",
       " | NaN\n",
       " | C00217 - Registries alert when large batches o...\n",
       " | TA07\n",
       " | Channel Selection\n",
       " | 
\n",
       "    \n",
       "      | 167\n",
       " | C00218\n",
       " | Censorship\n",
       " | removal\n",
       " | Alter and/or block the publication/disseminati...\n",
       " | NaN\n",
       " | platform_admin\n",
       " | grugq\n",
       " | Taylor81\n",
       " | NaN\n",
       " | TA09 Exposure\n",
       " | D2 Deny\n",
       " | NaN\n",
       " | NaN\n",
       " | C00218 - Censorship\n",
       " | TA09\n",
       " | Exposure\n",
       " | 
\n",
       "    \n",
       "      | 115\n",
       " | C00219\n",
       " | Add metadata to content - out of the control o...\n",
       " | daylight\n",
       " | NaN\n",
       " | Add date and source to images\n",
       " | NaN\n",
       " | grugq\n",
       " | NaN\n",
       " | NaN\n",
       " | TA06 Develop Content\n",
       " | D3 Disrupt\n",
       " | NaN\n",
       " | NaN\n",
       " | C00219 - Add metadata to content - out of the ...\n",
       " | TA06\n",
       " | Develop Content\n",
       " | 
\n",
       "  \n",
       "
\n",
       "
186 rows × 16 columns
\n",
       "
\n",
       "\n",
       "
\n",
       "  \n",
       "    \n",
       "      | \n",
       " | id\n",
       " | technique_id\n",
       " | 
\n",
       "  \n",
       "  \n",
       "    \n",
       "      | 6\n",
       " | C00008\n",
       " | T0006\n",
       " | 
\n",
       "    \n",
       "      | 12\n",
       " | C00014\n",
       " | T0006\n",
       " | 
\n",
       "    \n",
       "      | 21\n",
       " | C00023\n",
       " | T0006\n",
       " | 
\n",
       "    \n",
       "      | 22\n",
       " | C00024\n",
       " | T0006\n",
       " | 
\n",
       "    \n",
       "      | 23\n",
       " | C00025\n",
       " | T0006\n",
       " | 
\n",
       "    \n",
       "      | 35\n",
       " | C00031\n",
       " | T0006\n",
       " | 
\n",
       "    \n",
       "      | 100\n",
       " | C00088\n",
       " | T0006\n",
       " | 
\n",
       "  \n",
       "
\n",
       "
\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",
       " | name\n",
       " | 
\n",
       "  \n",
       "  \n",
       "    \n",
       "      | 0\n",
       " | C00008\n",
       " | T0006\n",
       " | Create shared fact-checking database\n",
       " | 
\n",
       "    \n",
       "      | 1\n",
       " | C00014\n",
       " | T0006\n",
       " | Real-time updates to fact-checking database\n",
       " | 
\n",
       "    \n",
       "      | 2\n",
       " | C00023\n",
       " | T0006\n",
       " | Promote civility as an identity that people wi...\n",
       " | 
\n",
       "    \n",
       "      | 3\n",
       " | C00024\n",
       " | T0006\n",
       " | Promote constructive narratives i.e. not polar...\n",
       " | 
\n",
       "    \n",
       "      | 4\n",
       " | C00025\n",
       " | T0006\n",
       " | Promote identity neutral narratives\n",
       " | 
\n",
       "    \n",
       "      | 5\n",
       " | C00031\n",
       " | T0006\n",
       " | Dilute the core narrative - create multiple pe...\n",
       " | 
\n",
       "    \n",
       "      | 6\n",
       " | C00088\n",
       " | T0006\n",
       " | Poison pill recasting of message\n",
       " | 
\n",
       "  \n",
       "
\n",
       "