{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "164c0c7f",
   "metadata": {},
   "source": [
    "## tl;dr\n",
    "\n",
    "**Decision: proceed with a bounded broad Atlas, not a Q-Neko-only deep dive.**\n",
    "\n",
    "- Observed EU27-Japan quantum publications (2020-2026): **645**.\n",
    "- Explicit project and funder relations: **60.8%** each (392/645).\n",
    "- Dataset relations: **27.2%** (68/250; deterministic sample, Wilson 95% CI 22.1%-33.0%).\n",
    "- Software relations: **8.8%** (22/250; Wilson 95% CI 5.9%-13.0%).\n",
    "- Q-Neko aliases and call identifier returned **0 projects and 0 research products** in OpenAIRE.\n",
    "\n",
    "The broad graph is usable for a provenance-first evidence atlas, but software reuse must be presented as a metadata observability gap rather than an activity gap."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7e8468bf",
   "metadata": {},
   "source": [
    "## Context & Methods\n",
    "\n",
    "### Key Assumptions\n",
    "\n",
    "- Scope is conservative: a record must match at least one of eight exact quantum phrases and resolve to at least one Japanese and one EU27 affiliation.\n",
    "- The analysis window is publication years 2020-2026, as observed on July 18, 2026 (UTC).\n",
    "- A project connection requires an explicit OpenAIRE result-project relation. A funding connection requires a funder object inside that relation; the unreliable top-level `publiclyFunded` flag is not used.\n",
    "- Dataset/software connections use both directions of the OpenAIRE Scholix link endpoint.\n",
    "- Dataset/software rates use a deterministic SHA-256 sample of 250 records. A stricter title-literal subset of 87 records is fully audited as a sensitivity check.\n",
    "\n",
    "Sources: OpenAIRE Graph V3 research products/projects/organizations and Graph V1 Scholix links. Raw query responses are cached under `analysis/output/cache`."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "70787384",
   "metadata": {},
   "source": [
    "## Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "41a9f831",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-07-18T01:26:20.267180Z",
     "iopub.status.busy": "2026-07-18T01:26:20.267180Z",
     "iopub.status.idle": "2026-07-18T01:26:22.293824Z",
     "shell.execute_reply": "2026-07-18T01:26:22.291814Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(645, 304)"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from pathlib import Path\n",
    "import json\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "ROOT = Path.cwd()\n",
    "if not (ROOT / 'analysis').exists():\n",
    "    ROOT = ROOT.parent\n",
    "OUT = ROOT / 'analysis' / 'output'\n",
    "metrics = json.loads((OUT / 'metrics.json').read_text(encoding='utf-8'))\n",
    "corpus = pd.read_csv(OUT / 'eu27_japan_corpus.csv')\n",
    "links = pd.read_csv(OUT / 'scholix_link_audit.csv')\n",
    "len(corpus), len(links)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "4b30bc8b",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-07-18T01:26:22.297825Z",
     "iopub.status.busy": "2026-07-18T01:26:22.296823Z",
     "iopub.status.idle": "2026-07-18T01:26:22.335511Z",
     "shell.execute_reply": "2026-07-18T01:26:22.333503Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>metric</th>\n",
       "      <th>numerator</th>\n",
       "      <th>denominator</th>\n",
       "      <th>rate</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>project</td>\n",
       "      <td>392</td>\n",
       "      <td>645</td>\n",
       "      <td>60.8%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>funding</td>\n",
       "      <td>392</td>\n",
       "      <td>645</td>\n",
       "      <td>60.8%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>dataset</td>\n",
       "      <td>68</td>\n",
       "      <td>250</td>\n",
       "      <td>27.2%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>software</td>\n",
       "      <td>22</td>\n",
       "      <td>250</td>\n",
       "      <td>8.8%</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     metric  numerator  denominator   rate\n",
       "0   project        392          645  60.8%\n",
       "1   funding        392          645  60.8%\n",
       "2   dataset         68          250  27.2%\n",
       "3  software         22          250   8.8%"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "summary = pd.DataFrame([\n",
    "    {'metric': name, 'numerator': item['numerator'], 'denominator': item['denominator'], 'rate': item['rate']}\n",
    "    for name, item in metrics['rates'].items()\n",
    "])\n",
    "summary.assign(rate=summary['rate'].map(lambda value: f'{value:.1%}'))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b947a5d4",
   "metadata": {},
   "source": [
    "## Results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "3fdc49d3",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-07-18T01:26:22.339529Z",
     "iopub.status.busy": "2026-07-18T01:26:22.337519Z",
     "iopub.status.idle": "2026-07-18T01:26:22.356670Z",
     "shell.execute_reply": "2026-07-18T01:26:22.354656Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>metric</th>\n",
       "      <th>numerator</th>\n",
       "      <th>denominator</th>\n",
       "      <th>rate</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>project</td>\n",
       "      <td>45</td>\n",
       "      <td>87</td>\n",
       "      <td>51.7%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>funding</td>\n",
       "      <td>45</td>\n",
       "      <td>87</td>\n",
       "      <td>51.7%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>dataset</td>\n",
       "      <td>21</td>\n",
       "      <td>87</td>\n",
       "      <td>24.1%</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>software</td>\n",
       "      <td>7</td>\n",
       "      <td>87</td>\n",
       "      <td>8.0%</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     metric  numerator  denominator   rate\n",
       "0   project         45           87  51.7%\n",
       "1   funding         45           87  51.7%\n",
       "2   dataset         21           87  24.1%\n",
       "3  software          7           87   8.0%"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "strict_summary = pd.DataFrame([\n",
    "    {'metric': name, 'numerator': item['numerator'], 'denominator': item['denominator'], 'rate': item['rate']}\n",
    "    for name, item in metrics['strict_title_sensitivity'].items() if isinstance(item, dict)\n",
    "])\n",
    "strict_summary.assign(rate=strict_summary['rate'].map(lambda value: f'{value:.1%}'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "5cc57077",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-07-18T01:26:22.358681Z",
     "iopub.status.busy": "2026-07-18T01:26:22.358681Z",
     "iopub.status.idle": "2026-07-18T01:26:22.731465Z",
     "shell.execute_reply": "2026-07-18T01:26:22.730019Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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/vnnm3HjxgUt8/rrr5sSJUqYsmXLms8//zzouV9++cVUrVrVHD161GQUMQssJk+ebAoXLmyqV69uhgwZYlLTsmXLbCEePnzY3p8/f769r4ADAAAAGcfq1atNw4YNTeXKlc369ettPVGN3GvXrvUv8/zzz5tRo0aZd9991/z111/moosuMs2aNTM7d+5MdL233367Wbdunfnpp59sw/ngwYNNz549zZdffmmf37Rpkxk4cKCZNWuWmTBhgunSpYvZt2+ffU510m7duplXX33V5MqVy2QUMQssBgwYYKNDFdArr7xizqTs2bObYsWKmUyZMp3R9wUAAEDaGjRokLnwwgvN6NGjzbnnnmsbup988klTs2ZNf2/Fc889Z/r06WOuuuoqU7RoUbtsQkKCeeuttxJd76+//mpuu+02U6lSJdtjoUBDPR5eT8fChQtNvXr1zAUXXGDXW7JkSbN8+XL73LPPPmvq1KljmjZtajIS58DixIkTZuvWrba7SJV7pSQdO3bMdvuERoFaNjCFScv9888//ucPHTqU6PuoO+vgwYNhn7v44ottdJolSxan9YamWAEAACB+HTlyxHzzzTc2AEjMxo0bbT31yiuvDGqUVi+Hsl4S06FDB/PBBx+YP//809ZrlZ2zd+9e07p16yS36Y8//rApU+ohyWicA4ulS5faaE3uvPNOU6tWLTN37lzz4Ycfmtq1awctqwgvMIVJB4Jy0kaOHGmDEkWZ5cqVs68PpGhS0aVy3LT81KlTg54PTYWKdL1jx441RYoU8a/3scceC9o+AAAAxK8tW7bY+p8ailUfVdpRlSpVbI+B11DsjcM955xzgl6r+mFSY3RfeOEF+5qKFSvaHgulNinlSWlUcumll5pFixaZlStXmh9++MFs27bN9pzcfffdtg46Y8YM28OhnoxJkyaZjCCr6wouueQSm2OmglSFX9GfvP322xG9Xr0L6m3YsGGDLTTlrilAUY6cNxine/fuNidO0ajy5a655hrn9Sog0mPvvfeejUiVQ5fcerVO3TwHDhyI6DMCAAAg9pTOJI8//rj55JNPbBaLKvm33nqryZYtm+nbt2+ir1XgkVQa/c0332z27NljfvvtNxsgqJ6rdKi8efOa5s2bm/Lly9thABqrofd66623zKeffmry5Mlje0c05uO7776z23j11Vfb5RTMpGdxMd2s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rFhh2rZta0qVKmWyZMlibr31Vvu3HpdFixaZSy65xFSpUsWut3Tp0jbIEW2LHlMAk5GkWmCxYcMGc+TIEfv3v//+6/873DIqcHU37dmzx//cqVOnzNatW82BAwdOe92FF15oZsyYYQs51Pbt28O+JpC25+DBg/77iir//vtv+7eiXN0U8QIAACB+HT582Hz//femffv2iY6F2Lhxo+2ZaNy4sf+xbNmymQYNGtjehsR07tzZvPfee2bNmjW2J2LChAlm//795pZbbrHPq4E78P0SEhJssPLbb7/ZZRW8ZDSpFlhUrVrVPPjgg+a8886zEWPhwoXN448/ftoygwcPttGfCleFJyoM5aopL025cDfddJPZt29fkqlQCjTUi3HBBRfYiPHSSy+1B0Kg6dOn26iyXLlypmzZsjYK1QGiAEfbIeoW0005cwAAAIhfaoRWY7RSlVQH1PiJMmXK2DqnV+n30p3OOeecoNeee+65SaZCqdehRIkSth6rcRS9evUyb7zxhr8npH79+mbx4sX2pnro9u3bbeO3UqCee+45mx6leqxuqttmBFlTc+Uff/yxmT17tqlevbqNJlVhV4X/mmuu8S8zbdo0M3/+fFvZl2XLlplu3bqZiRMnmttuu83s2LHDXH311aZ///6JdletXLnSDq55//33zQ033GAPJAUKiijVXaWoVOtt1aqVeeKJJ8zAgQPt6z799FPzxx9/mIsvvti88847plmzZkkOCtfIft08yfWMAAAAIPV4My5p/IPGT9SpU8fMmTPH3HjjjTZ13qvzhevN0P2k0upVp/zvv//Mpk2bbEO56qyqm+bOndu0bNnSBjAvvviirYOqrjlx4kQzefJkG0go6FBjtuq4ep+GDRua6667zg4sT89SdYxFz549bVAhV111lbn55pvtIJZAffv29QcV8tprr5krrrjCFpyoAB577DFb8Vd3VzhjxoyxBaZIVd1dOgA6depkB+1owI288sor9mB74IEHbDeVbjoQFFREasSIEaZAgQL+m3pGAAAAkDbUoyBqlNZ4h6xZs9o6p1KjPvvss6BllAofSPcTq+ir4fnbb7+1s0spy0WBg+qxzZs3t4PAPXfddZetd2r5OnXq2Lqi6qWapUo9G6qbXnTRRaZGjRr2sfQuVQOLmjVrBt3Xzg3tEVD6UiAVjJYLVKtWLRvtKWUpHAUP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YOxo+lLNANWiRQu7/wNvgTN79O7d28728c4779ibrrWgGYoQO126dPH179/f99lnn/m++uor36BBg+wMda+//rp/GV2vQtd00bVG9J0YOnSo/Y7MmjWLokhF4WaFWrBggZ1aU7PUTZ061U7RrJmiNAUnYuObb76x05uOHz/eN2PGDDvFr64bou9GoGHDhvkKFixop6XVb0qpUqV8nTp1ohhiTL8TumaCjvcPP/zQ/h43a9bMPxuRpqTV1My66Tw2YsQIew7TsogtXUdHl0bQdyKc1atX27qtrmXxxRdf+Nq0aWN/twPrWJHIpH9iEQVlNJMmTTIffvihjcbVAtu3b9+wV5NE7Hz22Wfm+eefP+3xXr162QGrntmzZ5uxY8faVBwNWn3wwQdtbwZStxzkm2++sa2zorxylYN6KrxWXXWDc/Xt2NFYrwkTJtj9rlmJ1MqnVKjAwduiFsOnn37aLFu2zLYU3nvvvbb1HKmnR48epnLlymbgwIFBjys96uWXX7YttJopTeen0MGrcKNUD+WRb9q0ybbOauxLaKurqj5vv/22nXRCV95WC65+S0IHdMONeuVefPFF2yOkWQHVW9SzZ8+g+tL+/fvNM888Y78b6kXt2rWr7RFHbCm7RqnLGrydWBqsZobS77tmsNP564EHHrCznkaDwAIAAACAM8ZYAAAAAHBGYAEAAADAGYEFAAAAAGcEFgAAAACcEVgAAAAAcEZgAQAAAMAZgQUAAAAAZwQWABDFBYYWL16crvbX0qVLzU8//WQyMpWpyjYj+fbbb83WrVtT/Po5c+aYP//8M6bbBODslzWtNwAA4oGuvvvLL7+Yv//+2xQuXNhccskl9kqxgXQF2bx585p69eqZ9OKdd96xVyhu2LChyQh0dV9ddfmyyy7zPzZu3Dhz6NAhU79+fXM2bXdKrVixwtxxxx3m999/9z+2fPly8++//5oGDRqcdtz/8MMP9qruZcuW9T+moERX5VVAlilTJudtApA+EFgAyPC++uorc88999gK1fnnn2+2bNli1q9fb55++mn7ONKP1157zQaRgRV0BZH//fefOdu2O6Uefvhh07NnT5MvXz57f+TIkebll1+2gcPBgwdtEJMrVy5/ENKtWzezbNmyoHV06NDBDBkyxEyZMsXcdNNNztsEIH0gsACQoSkNqFWrVmb48OFm8ODB/tbX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",
      "text/plain": [
       "<Figure size 800x450 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_df = summary.copy()\n",
    "fig, ax = plt.subplots(figsize=(8, 4.5))\n",
    "colors = ['#2D5B8A', '#6F8FAF', '#D39C2C', '#C56A3A']\n",
    "bars = ax.barh(plot_df['metric'], plot_df['rate'] * 100, color=colors)\n",
    "ax.set_xlim(0, 70)\n",
    "ax.set_xlabel('Observed connection rate (%)')\n",
    "ax.set_title('OpenAIRE connections in the EU27-Japan quantum corpus')\n",
    "ax.grid(axis='x', color='#DDDDDD', linewidth=0.8)\n",
    "ax.set_axisbelow(True)\n",
    "for bar, value in zip(bars, plot_df['rate'] * 100):\n",
    "    ax.text(value + 1, bar.get_y() + bar.get_height()/2, f'{value:.1f}%', va='center')\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "8b3f7a22",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-07-18T01:26:22.734465Z",
     "iopub.status.busy": "2026-07-18T01:26:22.734465Z",
     "iopub.status.idle": "2026-07-18T01:26:22.748849Z",
     "shell.execute_reply": "2026-07-18T01:26:22.747835Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>check</th>\n",
       "      <th>count</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>project link but publiclyFunded=false</td>\n",
       "      <td>386</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>publiclyFunded=true</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Japan-query records with no resolved country</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Q-Neko project records</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Q-Neko research products</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                          check  count\n",
       "0         project link but publiclyFunded=false    386\n",
       "1                           publiclyFunded=true      7\n",
       "2  Japan-query records with no resolved country     17\n",
       "3                        Q-Neko project records      0\n",
       "4                      Q-Neko research products      0"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "quality = metrics['quality_checks']\n",
    "pd.DataFrame([\n",
    "    {'check': 'project link but publiclyFunded=false', 'count': quality['project_link_but_publiclyFunded_false']},\n",
    "    {'check': 'publiclyFunded=true', 'count': quality['publiclyFunded_true']},\n",
    "    {'check': 'Japan-query records with no resolved country', 'count': quality['records_with_no_resolved_country']},\n",
    "    {'check': 'Q-Neko project records', 'count': metrics['q_neko']['projects_union']},\n",
    "    {'check': 'Q-Neko research products', 'count': metrics['q_neko']['research_products_union']},\n",
    "])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9647e118",
   "metadata": {},
   "source": [
    "## Takeaways\n",
    "\n",
    "1. **The broad Atlas passes the connectivity feasibility gate.** 392 of 645 observed cross-region publications have explicit project/funder edges.\n",
    "2. **Reusable-output visibility is uneven.** Dataset links are observable for 27.2%, while software links are only 8.8%. The strict-title sensitivity is similar (24.1% dataset; 8.0% software), so the result is not explained by broad abstract matching alone.\n",
    "3. **Q-Neko is not yet an OpenAIRE-deep-dive candidate.** It is externally documented and newly launched, but no corresponding OpenAIRE project or product record was found under four identifiers/aliases.\n",
    "4. **Product implication.** Build a bounded, curated broad Atlas with an inspectable `not observable in OpenAIRE` state; use Q-Neko as a forward-looking policy anchor and ingestion watchlist, not as the sole evidence corpus."
   ]
  }
 ],
 "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.12.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
