{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"id": "judicial-latvia",
"metadata": {},
"outputs": [],
"source": [
"!kgtk --debug query -i ../../gdrive-kgtk-dump-2020-12-07/claims.tsv.gz \\\n",
" --match \"(x)-[r{label: property}]->(y{wikidatatype: wikidatatype})\" \\\n",
" --return 'r.id as `id`, x as `node1`, property as `label`, y as `node2`, wikidatatype as `node2;wikidatatype`' \\\n",
" -o ../../data/claims.edited.tsv \\\n",
" --graph-cache ~/temp1.sqlite3.db"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "attended-sphere",
"metadata": {},
"outputs": [],
"source": [
"!kgtk --debug query -i ../../data/removed_statements.tsv \\\n",
" ../../gdrive-kgtk-dump-2020-12-07/metadata.property.datatypes.tsv.gz \\\n",
" --match \"removed: (x)-[r{label: property}]->(y), datatypes: (property)-[]->(datatype)\" \\\n",
" --return 'r.id as `id`, x as `node1`, property as `label`, y as `node2`, datatype as `node2;wikidatatype`' \\\n",
" -o ../../data/removed_statements_w_datatype.tsv --graph-cache ~/temp1.sqlite3.db"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "adjacent-disorder",
"metadata": {},
"outputs": [],
"source": [
"!kgtk cat -i ../../data/claims.edited.tsv \\\n",
" ../../data/removed_statements_w_datatype.tsv \\\n",
" -o ../../data/claims.w_removed_statements.tsv"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "juvenile-ability",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "a8ed952b33f9462f86bdcae389daaf11",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/1225057250 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import gzip\n",
"from tqdm.notebook import tqdm\n",
"propFileDict = {}\n",
"fileLineCount = 1225057250\n",
"with open('../../data/claims.w_removed_statements.tsv','r') as fin: \n",
" headerLine = next(fin)\n",
" for line in tqdm(fin, total = fileLineCount):\n",
" lineP = line.rstrip().split(\"\\t\")\n",
" if \"external-id\" in lineP[-1]:\n",
" continue\n",
" prop = lineP[2]\n",
" if prop not in propFileDict:\n",
" propFileDict[prop] = open(\"../../propertiesSplitWRemoved2/claims.\"+str(prop)+\".tsv\",\"w\")\n",
" propFileDict[prop].write(headerLine)\n",
" propFileDict[prop].write(line)\n",
" for file1 in propFileDict.values():\n",
" file1.close()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "knowing-bryan",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2021-03-12 19:33:50 sqlstore]: IMPORT graph directly into table graph_11 from /data/wd-correctness/propertiesSplit/claims.P996.tsv ...\n",
"[2021-03-12 19:33:51 sqlstore]: IMPORT graph directly into table graph_12 from /data/wd-correctness/wikidata-20210215/derived.isastar.tsv.gz ...\n",
"^C\n"
]
}
],
"source": [
"!kgtk --debug query -i ../../propertiesSplitWRemoved2/claims.P996.tsv \\\n",
" ../../constraintsOP/typeConstraint/claims.type-constraints_all.tsv \\\n",
" ../../wikidata-20210215/derived.isastar.tsv.gz \\\n",
" --match \"m: (node1)-[nodeProp]->(node2), c: (rLabel)-[:P2308]->(parent), d: (node1)-[]->(par), c: (eLabel)-[:P2303]->(eNode)\" \\\n",
" --where 'nodeProp.label = rLabel and (par = parent or (rLabel = eLabel and node1 = eNode))' \\\n",
" --return 'nodeProp.id, node1, nodeProp.label, node2, max(parent) as `node1;ancestor`' \\\n",
" -o ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P996.correct.tsv \\\n",
" --graph-cache ~/sqlite3_caches/mandConst001.sqlite3.db ; \\\n",
" kgtk --debug ifnotexists -i ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P996.all.tsv \\\n",
" --filter-on ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P996.correct.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \\\n",
" -o ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P996.incorrect.tsv"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "abstract-retreat",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2021-03-12 22:33:26 query]: SQL Translation:\r\n",
"---------------------------------------------\r\n",
" SELECT graph_11_c1.\"id\", graph_11_c1.\"node1\", graph_11_c1.\"label\", graph_11_c1.\"node2\"\r\n",
" FROM graph_11 AS graph_11_c1, graph_14 AS graph_14_c2\r\n",
" WHERE graph_11_c1.\"node1\"=graph_14_c2.\"node1\"\r\n",
" AND (graph_14_c2.\"node2\" IN (?, ?, ?))\r\n",
" PARAS: ['Q1238720', 'Q3331189', 'Q47461344']\r\n",
"---------------------------------------------\r\n"
]
}
],
"source": [
"!kgtk --debug query -i ../../propertiesSplitWRemoved2/claims.P996.tsv \\\n",
" ../../wikidata-20210215/derived.isastar.tsv.gz \\\n",
" --match \"m: (node1)-[nodeProp]->(node2), d: (node1)-[]->(par)\" \\\n",
" --where 'par in [\"Q1238720\",\"Q3331189\",\"Q47461344\"]' \\\n",
" --return 'nodeProp.id, node1, nodeProp.label, node2' \\\n",
" -o ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P996.correct.tsv \\\n",
" --graph-cache ~/sqlite3_caches/mandConst001.sqlite3.db ; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplitWRemoved2/claims.P996.tsv \\\n",
" --filter-on ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P996.correct.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \\\n",
" -o ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P996.incorrect.tsv"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "strange-truck",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"81289 ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P996.correct.tsv\r\n"
]
}
],
"source": [
"!wc -l ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P996.correct.tsv"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "finnish-hampton",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2021-03-12 22:49:54 sqlstore]: IMPORT graph directly into table graph_15 from /data/wd-correctness/propertiesSplit/claims.P991.tsv ...\n",
"[2021-03-12 22:49:54 query]: SQL Translation:\n",
"---------------------------------------------\n",
" SELECT graph_15_c1.\"id\", graph_15_c1.\"node1\", graph_15_c1.\"label\", graph_15_c1.\"node2\"\n",
" FROM graph_15 AS graph_15_c1, graph_5 AS graph_5_c2\n",
" WHERE graph_15_c1.\"node1\"=graph_5_c2.\"node1\"\n",
" AND (graph_5_c2.\"node2\" IN (?))\n",
" PARAS: ['Q40231']\n",
"---------------------------------------------\n",
"[2021-03-12 22:49:55 sqlstore]: CREATE INDEX on table graph_15 column node1 ...\n",
"[2021-03-12 22:49:55 sqlstore]: ANALYZE INDEX on table graph_15 column node1 ...\n"
]
}
],
"source": [
"!kgtk --debug query -i ../../propertiesSplitWRemoved2/claims.P991.tsv \\\n",
" ../../wikidata-20210215/derived.P31P279star.tsv.gz \\\n",
" --match \"m: (node1)-[nodeProp]->(node2), d: (node1)-[]->(par)\" \\\n",
" --where 'par in [\"Q40231\"]' \\\n",
" --return 'nodeProp.id, node1, nodeProp.label, node2' \\\n",
" -o ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P991.correct.tsv \\\n",
" --graph-cache ~/sqlite3_caches/mandConst001.sqlite3.db ; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplitWRemoved2/claims.P991.tsv \\\n",
" --filter-on ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P991.correct.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \\\n",
" -o ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P991.incorrect.tsv"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "elegant-reverse",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2021-03-12 23:54:56 sqlstore]: IMPORT graph directly into table graph_16 from /data/wd-correctness/propertiesSplit/claims.P965.tsv ...\n",
"[2021-03-12 23:54:56 query]: SQL Translation:\n",
"---------------------------------------------\n",
" SELECT graph_16_c1.\"id\", graph_5_c2.\"node1\", graph_16_c1.\"label\", graph_16_c1.\"node2\"\n",
" FROM graph_16 AS graph_16_c1, graph_5 AS graph_5_c2\n",
" WHERE graph_16_c1.\"node1\"=graph_5_c2.\"node1\"\n",
" AND (graph_5_c2.\"node2\" IN (?))\n",
" PARAS: ['Q6023295']\n",
"---------------------------------------------\n",
"[2021-03-12 23:54:56 sqlstore]: CREATE INDEX on table graph_16 column node1 ...\n",
"[2021-03-12 23:54:56 sqlstore]: ANALYZE INDEX on table graph_16 column node1 ...\n"
]
}
],
"source": [
"!kgtk --debug query -i ../../propertiesSplitWRemoved2/claims.P965.tsv \\\n",
" ../../wikidata-20210215/derived.P31P279star.tsv.gz \\\n",
" --match \"m: (node1)-[nodeProp]->(node2), d: (node1)-[]->(par)\" \\\n",
" --where 'par in [\"Q6023295\"]' \\\n",
" --return 'nodeProp.id, node1, nodeProp.label, node2' \\\n",
" -o ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P965.correct.tsv \\\n",
" --graph-cache ~/sqlite3_caches/mandConst001.sqlite3.db ; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplitWRemoved2/claims.P965.tsv \\\n",
" --filter-on ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P965.correct.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \\\n",
" -o ../../constraintsOP/typeConstraint/claims.type-constraints.mandatory.instanceOf.P965.incorrect.tsv"
]
},
{
"cell_type": "markdown",
"id": "matched-strength",
"metadata": {},
"source": [
"# Generate Queries"
]
},
{
"cell_type": "markdown",
"id": "black-insured",
"metadata": {},
"source": [
"## Type Constraint"
]
},
{
"cell_type": "markdown",
"id": "interior-humor",
"metadata": {},
"source": [
"### Understand Constraints File"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "clinical-brunei",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"df = pd.read_csv('../../constraintsOP/typeConstraint/claims.type-constraints_all.tsv',sep='\\t')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "assured-cleaners",
"metadata": {},
"outputs": [],
"source": [
"df1 = df.groupby(['node1','label']).node2.apply(lambda p: p.tolist()).reset_index()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "sharing-evolution",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" node1 \n",
" label \n",
" node2 \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" P1001 \n",
" P2308 \n",
" [Q102496, Q105985, Q1140371, Q1151067, Q119768... \n",
" \n",
" \n",
" 1 \n",
" P1001 \n",
" P2309 \n",
" [Q30208840] \n",
" \n",
" \n",
" 2 \n",
" P1002 \n",
" P2308 \n",
" [Q630010] \n",
" \n",
" \n",
" 3 \n",
" P1002 \n",
" P2309 \n",
" [Q21514624] \n",
" \n",
" \n",
" 4 \n",
" P1004 \n",
" P2308 \n",
" [Q2221906, Q23413, Q3947, Q41176, Q88291] \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" node1 label node2\n",
"0 P1001 P2308 [Q102496, Q105985, Q1140371, Q1151067, Q119768...\n",
"1 P1001 P2309 [Q30208840]\n",
"2 P1002 P2308 [Q630010]\n",
"3 P1002 P2309 [Q21514624]\n",
"4 P1004 P2308 [Q2221906, Q23413, Q3947, Q41176, Q88291]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df1.head()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "still-trail",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" node1 \n",
" label \n",
" node2 \n",
" \n",
" \n",
" \n",
" \n",
" 69 \n",
" P105 \n",
" P2308 \n",
" [Q16521] \n",
" \n",
" \n",
" 70 \n",
" P105 \n",
" P2309 \n",
" [Q21503252] \n",
" \n",
" \n",
" 71 \n",
" P105 \n",
" P2316 \n",
" [Q21502408] \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" node1 label node2\n",
"69 P105 P2308 [Q16521]\n",
"70 P105 P2309 [Q21503252]\n",
"71 P105 P2316 [Q21502408]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df1[df1['node1'] == 'P105']"
]
},
{
"cell_type": "markdown",
"id": "solid-browser",
"metadata": {},
"source": [
"### Query Generator"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "bright-impossible",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "392202b0f3984101a4787815b59edf5e",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/4810 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Something failed for prop: P1249\n",
"Something failed for prop: P6790\n"
]
}
],
"source": [
"from tqdm.notebook import tqdm\n",
"import os.path\n",
"import os\n",
"\n",
"cnt = 0\n",
"fCnt = 1\n",
"fOP = None\n",
"for prop in tqdm(df1.node1.unique()):\n",
" try:\n",
" if not(os.path.isfile(\"../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv\")):\n",
" continue\n",
" relation = df1[(df1['node1'] == prop) & (df1['label'] == 'P2309')].node2.values[0][0]\n",
" type1 = df1[(df1['node1'] == prop) & (df1['label'] == 'P2316')].node2.values\n",
"# print(type1)\n",
"\n",
" parents = df1[(df1['node1'] == prop) & (df1['label'] == 'P2308')].node2.values[0]\n",
" exceptions = df1[(df1['node1'] == prop) & (df1['label'] == 'P2303')].node2.values\n",
" \n",
" if relation == \"Q21503252\":\n",
" parentFile = \"P31\"\n",
" parentTitle = 'instanceOf'\n",
" elif relation == \"Q21514624\":\n",
" parentFile = \"P279\"\n",
" parentTitle = 'subclass'\n",
" else:\n",
" parentFile = \"isa\"\n",
" parentTitle = 'instanceOfOrSubclass'\n",
"\n",
" if len(type1) != 0 and type1[0][0] == \"Q21502408\":\n",
" typeVal = \"mandatory\"\n",
" elif len(type1) != 0 and type1[0][0] == \"Q62026391\":\n",
" typeVal = \"suggestion\"\n",
" else:\n",
" typeVal = \"normal\"\n",
"\n",
" if len(exceptions):\n",
" exceptionPart = \"or node1 in \" + str(exceptions[0]).replace(\"'\",'\"')\n",
" else:\n",
" exceptionPart = \"\"\n",
" \n",
" folderName = 'typeConstraint_Final'\n",
" shellFileSuffix = 'typeConstraintValidator'\n",
" \n",
" if cnt % 120 == 0:\n",
" if fOP:\n",
" fOP.close()\n",
" fOP = open(\"../../propertiesSplitWRemoved2/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n",
" fCnt += 1\n",
" \n",
" fOP.write(\"{ time (kgtk --debug query -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
" ../../wikidata-20210215/derived.\" + parentFile + \".tsv.gz \\\n",
" ../../wikidata-20210215/derived.P279star.tsv.gz \\\n",
" --match 'm: (node1)-[nodeProp]->(node2), \" + parentFile + \": (node1)-[]->(nodex), P279star: (nodex)-[]->(par)' \\\n",
" --where 'par in \" + str(parents).replace(\"'\",'\"') + \" \" + exceptionPart + \"' \\\n",
" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct.tsv \\\n",
" --graph-cache ~/sqlite3_caches/const120_\" + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect.tsv ) } 2>> ../../propertiesSplitWRemoved2/checkViolations/exec_logs/\" + shellFileSuffix + str(fCnt) + \".txt;\")\n",
"\n",
" cnt += 1\n",
" except:\n",
" print(\"Something failed for prop:\",prop)\n",
"\n",
"if fOP:\n",
" fOP.close()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "electrical-agreement",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1465"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cnt"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "outside-stupid",
"metadata": {},
"outputs": [],
"source": [
"# import os\n",
"# for i in range(1,33):\n",
"# os.system(\"screen -dm sh ../../propertiesSplitWRemoved2/checkViolations/typeConstraintValidator\"+str(i)+\".sh\")\n",
" "
]
},
{
"cell_type": "markdown",
"id": "competitive-canvas",
"metadata": {},
"source": [
"### Analyze Violations"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "casual-perth",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "e2aa42859569406cb8ee7fb237917535",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"0it [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "22777e2fe5a34330b18a7bc2d970b4d0",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/334 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "d8d770b5aa2a4ee08818b9176d48013d",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/22 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "223b94da38124e12ab5bc048cf832de1",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/2574 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import pandas as pd\n",
"import os\n",
"from tqdm.notebook import tqdm\n",
"\n",
"typeConstViolations = {}\n",
"\n",
"def countLines(fname):\n",
" cnt = -1\n",
" with open(fname, 'r') as f:\n",
" for line in f:\n",
" cnt += 1\n",
" return cnt\n",
"\n",
"propList = set()\n",
"\n",
"violations = {}\n",
"\n",
"for folder in tqdm(iter(['mandatory', 'suggestion', 'normal'])):\n",
" typeConstViolations[folder] = {'instanceOf': {'correct': 0, 'incorrect': 0}, 'subclass': {'correct': 0, 'incorrect': 0}, 'instanceOfOrSubclass': {'correct': 0, 'incorrect': 0},'propCount': 0}\n",
" filePath = \"../../allConstraintsAnalysisWRemoved2/typeConstraint_Final/\"+folder+\"/\"\n",
" for filename in tqdm(os.listdir(filePath)):\n",
" type1 = filename.split(\".\")[2]\n",
" prop = filename.split(\".\")[3]\n",
" propList.add(prop)\n",
" correctness = filename.split(\".\")[4]\n",
" count1 = countLines(filePath+filename)\n",
" typeConstViolations[folder][type1][correctness] += count1\n",
" if prop not in violations:\n",
" violations[prop] = {'correct': 0, 'incorrect': 0, 'paths': []}\n",
" violations[prop][correctness] = count1\n",
" violations[prop]['paths'].append(filePath+filename)\n",
" if correctness == 'correct':\n",
" typeConstViolations[folder]['propCount'] += 1\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "widespread-sector",
"metadata": {},
"outputs": [],
"source": [
"# countLines(\"../../allConstraintsAnalysisWRemoved2/typeConstraint/mandatory/claims.type-constraints.subclass.P534.incorrect.tsv\")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "golden-affiliate",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1465 properties processed for type constraint for 547703656 statements\n"
]
}
],
"source": [
"recordCount = 0\n",
"for elem in typeConstViolations.keys():\n",
" for key1 in typeConstViolations[elem].keys():\n",
" try:\n",
" recordCount += typeConstViolations[elem][key1]['correct'] + typeConstViolations[elem][key1]['incorrect']\n",
" except:\n",
" continue\n",
"print(f\"{len(propList)} properties processed for type constraint for {recordCount} statements\")"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "needed-portfolio",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"typeConstDF = pd.DataFrame(violations).T"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "lesser-thomson",
"metadata": {},
"outputs": [],
"source": [
"typeConstDF['violation_ratio'] = typeConstDF.apply(lambda p: p.incorrect / (p.correct + p.incorrect), axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "flying-context",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" violation_ratio \n",
" \n",
" \n",
" \n",
" \n",
" P1303 \n",
" 203148 \n",
" 2610 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 0.012685 \n",
" \n",
" \n",
" P301 \n",
" 705949 \n",
" 28017 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 0.038172 \n",
" \n",
" \n",
" P3919 \n",
" 3393 \n",
" 158 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 0.044495 \n",
" \n",
" \n",
" P6185 \n",
" 269 \n",
" 12 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 0.042705 \n",
" \n",
" \n",
" P3922 \n",
" 1824 \n",
" 40 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 0.021459 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P1303 203148 2610 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P301 705949 28017 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P3919 3393 158 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P6185 269 12 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P3922 1824 40 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"\n",
" violation_ratio \n",
"P1303 0.012685 \n",
"P301 0.038172 \n",
"P3919 0.044495 \n",
"P6185 0.042705 \n",
"P3922 0.021459 "
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"typeConstDF.head()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "competitive-peeing",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" violation_ratio \n",
" \n",
" \n",
" \n",
" \n",
" P538 \n",
" 0 \n",
" 10 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 1.0 \n",
" \n",
" \n",
" P5589 \n",
" 0 \n",
" 5 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 1.0 \n",
" \n",
" \n",
" P8004 \n",
" 0 \n",
" 6 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 1.0 \n",
" \n",
" \n",
" P1354 \n",
" 0 \n",
" 2 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 1.0 \n",
" \n",
" \n",
" P5051 \n",
" 0 \n",
" 81 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 1.0 \n",
" \n",
" \n",
" P6510 \n",
" 0 \n",
" 4 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 1.0 \n",
" \n",
" \n",
" P1734 \n",
" 0 \n",
" 2 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 1.0 \n",
" \n",
" \n",
" P6014 \n",
" 0 \n",
" 3 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 1.0 \n",
" \n",
" \n",
" P2303 \n",
" 0 \n",
" 44 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 1.0 \n",
" \n",
" \n",
" P6001 \n",
" 0 \n",
" 16 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 1.0 \n",
" \n",
" \n",
" P2313 \n",
" 0 \n",
" 4 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 1.0 \n",
" \n",
" \n",
" P5802 \n",
" 0 \n",
" 1 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 1.0 \n",
" \n",
" \n",
" P8738 \n",
" 0 \n",
" 14 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 1.0 \n",
" \n",
" \n",
" P2312 \n",
" 0 \n",
" 5 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 1.0 \n",
" \n",
" \n",
" P2311 \n",
" 0 \n",
" 4 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 1.0 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P538 0 10 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P5589 0 5 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P8004 0 6 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P1354 0 2 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P5051 0 81 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P6510 0 4 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P1734 0 2 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P6014 0 3 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P2303 0 44 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P6001 0 16 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P2313 0 4 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P5802 0 1 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P8738 0 14 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P2312 0 5 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P2311 0 4 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"\n",
" violation_ratio \n",
"P538 1.0 \n",
"P5589 1.0 \n",
"P8004 1.0 \n",
"P1354 1.0 \n",
"P5051 1.0 \n",
"P6510 1.0 \n",
"P1734 1.0 \n",
"P6014 1.0 \n",
"P2303 1.0 \n",
"P6001 1.0 \n",
"P2313 1.0 \n",
"P5802 1.0 \n",
"P8738 1.0 \n",
"P2312 1.0 \n",
"P2311 1.0 "
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"typeConstDF.sort_values(by=['violation_ratio'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "backed-corruption",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['../../allConstraintsAnalysisWRemoved2/typeConstraint_Final/normal/claims.type-constraints.instanceOf.P4945.correct.tsv',\n",
" '../../allConstraintsAnalysisWRemoved2/typeConstraint_Final/normal/claims.type-constraints.instanceOf.P4945.incorrect.tsv']"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"list(typeConstDF.loc['P4945'].paths)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "clinical-lawsuit",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"count 1465.000000\n",
"mean 0.113799\n",
"std 0.226303\n",
"min 0.000000\n",
"25% 0.006623\n",
"50% 0.022537\n",
"75% 0.085443\n",
"max 1.000000\n",
"Name: violation_ratio, dtype: float64"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"typeConstDF['violation_ratio'].describe()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "wanted-domestic",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Type Constraint Violation Ratios')"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEICAYAAACwDehOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAZJ0lEQVR4nO3debglVXnv8e9PZqOCQmsQ0HbAgTggaRWTa0SJNwoKGg3RgCAPkZhonsThKg4xoCaSm6uoN0ZF8dqIA6K52hGjV8ExCWjjDGhoFaQBoUUaUFAG3/tHrS62h3P67NN99t5n+H6e5zxdtWpV1Vt776631lq1a6eqkCQJ4A6TDkCStHCYFCRJPZOCJKlnUpAk9UwKkqSeSUGS1DMpSNNI8sok7x7j/s5PcsAQ9Q5Isn4r9vOOJH+zpeuPS5LHJvnepONYjkwKS1iSnw38/SrJjQPzh48pht2TnJLkiiTXJ/lukhOS/MYI9/n5JH+6Nduoqr+vqqG2keT4JKdtZvmnkrx2mvJDk/w4ybZV9VtV9fmtCHm6/T43yZcHy6rq+VX1uvncT9vX8Ulubp+tjUn+I8lj5rB+Jbn/QJxfqqoHznecmp1JYQmrqjtt+gN+BDx1oOz9o95/krsB/wnsBDymqu4MPBHYBbjfqPe/mbi2HfMuVwNHJMmU8ucA76+qW8Ycz6ic3j5ruwGfA86YcDzaElXl3zL4Ay4Gfh/YHvgp8NCBZXcHbgBWAAcA64FXAj9p6x0+UHcH4H/RJZkrgXcAO82wz9cD3wbusJm4fgf4KnBt+/d3BpZ9Hngd8O/A9cD/A3Zry3YETgOuBja2de8B/B1wK/AL4GfAP7X6BbwAuAj4YSt7C3ApcB1wHvDYgX0fD5zWple29Y9qx/0T4FVt2ZOAm4Cb2/6+Oc0x7tSO7/cGyu7aYnz44Psz8Bq/Gbi8/b0Z2KEtOwBYP7Cd44Dvt9fnAuDprfzBbfu3trg2tvL3Aq8fWP95wLr2mVgD3HNgWQHPb6/ZRuBtQGZ4H/vXq83v09Zf0eYfRXeBsBG4AvgnYPu27Iut7s9brH88zXE+mO7zsBE4HzhkYNlB7divBy4DXjrp/2+L+c+WwjJTVTcBHwKOGCh+NnBWVW1o879Jd7W3B92J8OQkm5ryJwIPAPYF7t/qvGaG3f0+8C9V9avpFraWxJnAW4FdgTcBZybZdaDanwBH0yWu7YGXtvKjgJ2Bvdq6zwdurKpXAV8CXlhdi+iFA9t6GvBouhMWdIlkX+BuwAeAM5LsOMOxAPw34IHAgcBrkjy4qj4F/D3tKrmqHj51paq6EfgwcORA8WHAd6vqm9Ps51XA/i22h9OdUF89Q0zfBx5L91qcAJyWZPequpDuNfnPFtcuU1dM8gTgDS2W3YFL6D4bg54CPBJ4WKv3BzPEMbjd7duxXg1c04pvBV5E97l6DN1r+BcAVfV7rc7DW6ynT9nedsC/0l0U3B34S+D9A5/JU4A/q64l+hDg7Nli1MxMCsvTauDZA90ZzwHeN6XO31TVL6vqC3Qn7sNa/WOBF1XVT6vqeroT4rNm2M+udFeFMzkYuKiq3ldVt1TVB4HvAk8dqPN/quq/Bk6s+7bym9v2719Vt1bVeVV13SzH/YYW940AVXVaVV3d9v1Guiv0zfVjn1BVN7YT+TfpTtjDWg08cyDpHNnKpnM48Nqquqol6hPo3qPbqaozquryqvpVO5leRJdEhnE48J6q+lpV/RJ4BfCYJCsH6pxYVRur6kd0XUL7bmZ7hyXZCNxI1wJ5ZrWusfb+nNNe64uBdwKPGzLO/YE7tVhuqqqzgU/QXcxA91nYJ8ldquqaqvrakNvVNEwKy1BVnUvXXXRAkgfRXfGvGahyTVX9fGD+EuCedN1LdwTOa4OJG4FPtfLpXE13BTqTe7ZtD7qErvWxyY8Hpm+gOzlAl8Q+DXwoyeVJ/me7otycSwdnkrw0yYVJrm3HsjPdlexMZoplVlX1Zbpup6cluR/difsDM1Sf+rpsev1vJ8mRSb4x8H48hM0fw4z7qaqf0b1nw7z+0/lwa5HcA/gO8NsDcT4gySfawPp1dBcTc4nz0iktzsHPyTPoupAuSfKFuQxw6/ZMCsvXaroupOcAH6mqXwwsu+uUu4PuRde3/RO6q8Dfqqpd2t/O1Q0uTuezwNOTzPQ5uxy495Sye9H1C29WVd1cVSdU1T504xJP4bbumZke/duXJ3ks8DK6LpG7tpPZtcDUweBhDPuo4VNbjEcAn66qK2eoN/V12fT6/5ok9wbeBbwQ2LUdw3e47Rhmi+vX9tPe810Z4vXfnKr6CV2L8vgkmy4K3k7XCty7qu5CN2Y17Gt9ObDXlM9R/zmpqq9W1aF0XUsfo2tRaguZFJav04Cn052gTp1m+QlJtm8nz6cAZ7QrtXcBJyW5O0CSPZLM1M/8JuAuwOp2AttU/01JHgZ8EnhAkj9Jsm2SP6br7//EbMEneXyShybZhm6g+GZg05XklcB9Z9nEnYFbgA3Atkle02LdElcCKzeT/DY5lW6c5XnM3HUE8EHg1UlWJNmNbsxmultef4PuxL8BIMnRdC2Fwbj2bH38M+3n6CT7JtmB7ur93Na9s1Wq6nt0LbmXtaI7071PP2ut0z+fssrm3rNNLduXJdmufZ/jqXStxO2THJ5k56q6ue1j2jEsDceksExV1aXA1+hOKl+asvjHdAOElwPvB55fVd9ty15Od7fKOa0b4LPM0A9fVT+lu4q/GTg3yfXAWXRX5Ouq6mq6hPMSum6LlwFPaVeas/lN4CN0J4ELgS9w27jIW+j6769J8tYZ1v80XdfXf9F1RfyCKd1Lc7Dp1surk8zYn91Otv9BdzJfM1M9uru21gLfort762utbOr2LgDeSHdXz5XAQ+nu1NrkbLo7dX6c5HavaVV9Fvgb4KN0Yz/3Y+bxoS3xj8Cx7QLipXQ3DVxPd2Fx+pS6x9NdPGxMctiUOG+iSwJPpmut/jNw5MBn8jnAxe3z+Hy6sRJtoVT5IzvLVZL3AJdX1asHyg6gu7Vwz0nFJWlyxv0lHi0Q7Q6TPwQeMeFQJC0gdh8tQ0leRzcg+Y9V9cNJxyNp4bD7SJLUs6UgSeot6jGF3XbbrVauXDnpMCRpUTnvvPN+UlXTful0USeFlStXsnbt2kmHIUmLSpKpTxLo2X0kSeqZFCRJPZOCJKlnUpAk9UwKkqSeSUGS1DMpSJJ6JgVJUs+kIEnqLepvNG+Nlced2U9ffOLBE4xEkhYOWwqSpJ5JQZLUMylIknomBUlSz6QgSeqZFCRJPZOCJKlnUpAk9UwKkqSeSUGS1DMpSJJ6JgVJUs+kIEnqmRQkST2TgiSpZ1KQJPVMCpKknklBktQzKUiSeiYFSVLPpCBJ6o08KSTZJsnXk3yizd8nyblJ1iU5Pcn2rXyHNr+uLV856tgkSb9uHC2FvwIuHJj/B+Ckqro/cA1wTCs/BrimlZ/U6kmSxmikSSHJnsDBwLvbfIAnAB9pVVYDT2vTh7Z52vIDW31J0piMuqXwZuBlwK/a/K7Axqq6pc2vB/Zo03sAlwK05de2+r8mybFJ1iZZu2HDhhGGLknLz8iSQpKnAFdV1Xnzud2qOrmqVlXVqhUrVsznpiVp2dt2hNv+XeCQJAcBOwJ3Ad4C7JJk29Ya2BO4rNW/DNgLWJ9kW2Bn4OoRxidJmmJkLYWqekVV7VlVK4FnAWdX1eHA54BntmpHAR9v02vaPG352VVVo4pPknR7k/iewsuBFydZRzdmcEorPwXYtZW/GDhuArFJ0rI2yu6jXlV9Hvh8m/4B8Khp6vwC+KNxxCNJmp7faJYk9UwKkqSeSUGS1DMpSJJ6JgVJUs+kIEnqmRQkST2TgiSpZ1KQJPVMCpKknklBktQzKUiSeiYFSVLPpCBJ6pkUJEk9k4IkqWdSkCT1TAqSpJ5JQZLUMylIknomBUlSz6QgSeqZFCRJPZOCJKlnUpAk9UwKkqSeSUGS1DMpSJJ6JgVJUs+kIEnqmRQkST2TgiSpZ1KQJPVMCpKknklBktQzKUiSeiNLCkl2TPKVJN9Mcn6SE1r5fZKcm2RdktOTbN/Kd2jz69rylaOKTZI0vVG2FH4JPKGqHg7sCzwpyf7APwAnVdX9gWuAY1r9Y4BrWvlJrZ4kaYxGlhSq87M2u137K+AJwEda+WrgaW360DZPW35gkowqPknS7Y10TCHJNkm+AVwFfAb4PrCxqm5pVdYDe7TpPYBLAdrya4Fdp9nmsUnWJlm7YcOGUYYvScvOSJNCVd1aVfsCewKPAh40D9s8uapWVdWqFStWbO3mJEkDxnL3UVVtBD4HPAbYJcm2bdGewGVt+jJgL4C2fGfg6nHEJ0nqjPLuoxVJdmnTOwFPBC6kSw7PbNWOAj7epte0edrys6uqRhWfJOn2tp29yhbbHVidZBu65PPhqvpEkguADyV5PfB14JRW/xTgfUnWAT8FnjXC2CRJ0xgqKSR5aFV9ey4brqpvAY+YpvwHdOMLU8t/AfzRXPYhSZpfw3Yf/XP7ItpfJNl5pBFJkiZmqKRQVY8FDqcbCD4vyQeSPHGkkUmSxm7ogeaqugh4NfBy4HHAW5N8N8kfjio4SdJ4DZUUkjwsyUl0dw89AXhqVT24TZ80wvgkSWM07N1H/xt4N/DKqrpxU2FVXZ7k1SOJTJI0dsMmhYOBG6vqVoAkdwB2rKobqup9I4tOkjRWw44pfBbYaWD+jq1MkrSEDJsUdhx44ilt+o6jCUmSNCnDJoWfJ9lv00yS3wZu3Ex9SdIiNOyYwl8DZyS5HAjwm8AfjyooSdJkDJUUquqrSR4EPLAVfa+qbh5dWJKkSZjLA/EeCaxs6+yXhKo6dSRRSZImYtgH4r0PuB/wDeDWVlyASUGSlpBhWwqrgH38fQNJWtqGvfvoO3SDy5KkJWzYlsJuwAVJvgL8clNhVR0ykqgkSRMxbFI4fpRBSJIWhmFvSf1CknsDe1fVZ5PcEdhmtKFJksZt2EdnPw/4CPDOVrQH8LERxSRJmpBhB5pfAPwucB30P7hz91EFJUmajGGTwi+r6qZNM0m2pfuegiRpCRk2KXwhySuBndpvM58B/OvowpIkTcKwSeE4YAPwbeDPgE/S/V6zJGkJGfbuo18B72p/S87K487spy8+8eAJRiJJkzXss49+yDRjCFV133mPSJI0MXN59tEmOwJ/BNxt/sORJE3SUGMKVXX1wN9lVfVmwH4WSVpihu0+2m9g9g50LYe5/BaDJGkRGPbE/saB6VuAi4HD5j0aSdJEDXv30eNHHYgkafKG7T568eaWV9Wb5iccSdIkzeXuo0cCa9r8U4GvABeNIihJ0mQMmxT2BParqusBkhwPnFlVR4wqMEnS+A37mIt7ADcNzN/UyiRJS8iwLYVTga8k+b9t/mnA6pFEJEmamGHvPvq7JP8GPLYVHV1VXx9dWJKkSRi2+wjgjsB1VfUWYH2S+4woJknShAz7c5x/C7wceEUr2g44bZZ19kryuSQXJDk/yV+18rsl+UySi9q/d23lSfLWJOuSfGvKt6glSWMwbEvh6cAhwM8Bqupy4M6zrHML8JKq2gfYH3hBkn3ofpvhrKraGzirzQM8Gdi7/R0LvH0OxyFJmgfDJoWbqqpoj89O8huzrVBVV1TV19r09cCFwB7Aodw2SL2abtCaVn5qdc4Bdkmy+7AHIknaesMmhQ8neSfdifp5wGeZww/uJFkJPAI4F7hHVV3RFv2Y225t3QO4dGC19a1s6raOTbI2ydoNGzYMG4IkaQiz3n2UJMDpwIOA64AHAq+pqs8Ms4MkdwI+Cvx1VV3Xba5TVZXkdj/eszlVdTJwMsCqVavmtK4kafNmTQrtxP3JqnooMFQi2CTJdnQJ4f1V9S+t+Moku1fVFa176KpWfhmw18Dqe7YySdKYDNt99LUkj5zLhlsL4xTgwikPzFsDHNWmjwI+PlB+ZLsLaX/g2oFuJknSGAz7jeZHA0ckuZjuDqTQNSIetpl1fhd4DvDtJN9oZa8ETqQbozgGuITbfpfhk8BBwDrgBuDo4Q9DkjQfNpsUktyrqn4E/MFcN1xVX6ZLHtM5cJr6BbxgrvuRJM2f2VoKH6N7OuolST5aVc8YQ0ySpAmZbUxh8Er/vqMMRJI0ebMlhZphWpK0BM3WffTwJNfRtRh2atNw20DzXUYanSRprDabFKpqm3EFIkmavLk8OluStMSZFCRJPZOCJKlnUpAk9UwKkqSeSUGS1DMpSJJ6JgVJUs+kIEnqmRQkST2TgiSpZ1KQJPVMCpKknklBktQzKUiSeiYFSVLPpCBJ6pkUJEm92X6jedlZedyZ/fTFJx48wUgkafxsKUiSeiYFSVLPpCBJ6pkUJEk9k4IkqWdSkCT1TAqSpJ5JQZLUMylIknomBUlSz6QgSeqZFCRJvZElhSTvSXJVku8MlN0tyWeSXNT+vWsrT5K3JlmX5FtJ9htVXJKkmY2ypfBe4ElTyo4DzqqqvYGz2jzAk4G929+xwNtHGJckaQYjSwpV9UXgp1OKDwVWt+nVwNMGyk+tzjnALkl2H1VskqTpjXtM4R5VdUWb/jFwjza9B3DpQL31rex2khybZG2StRs2bBhdpJK0DE1soLmqCqgtWO/kqlpVVatWrFgxgsgkafkad1K4clO3UPv3qlZ+GbDXQL09W5kkaYzGnRTWAEe16aOAjw+UH9nuQtofuHagm0mSNCYj+43mJB8EDgB2S7Ie+FvgRODDSY4BLgEOa9U/CRwErANuAI4eVVySpJmNLClU1bNnWHTgNHULeMGoYpEkDcdvNEuSeiYFSVLPpCBJ6pkUJEk9k4IkqTeyu4+WgpXHndlPX3ziwROMRJLGw5aCJKlnUpAk9UwKkqSeYwpDGhxfAMcYJC1NthQkST2TgiSpZ1KQJPVMCpKknklBktQzKUiSeiYFSVLPpCBJ6pkUJEk9k4IkqWdSkCT1TAqSpJ4PxNtCUx+Qt4kPypO0mNlSkCT1bClI0iIxjp8ItqUgSerZUhihcWR1SZpPJoV5NtMAtCQtBnYfSZJ6JgVJUs/uowlwrEHSQmVLQZLUs6UwJlszAG3LQtK4mBQmbKYT/jBJxGQhab6ZFJY4E4ekuTApLBFLoWWx0OOTlgOTwgKyEL745olZWt4WVFJI8iTgLcA2wLur6sQJh7TgTCpxmCyWH9/z5WnBJIUk2wBvA54IrAe+mmRNVV0w2ciWpvm6G2pYMw2iz/VkM9d15zqQvzXbnKnOsNud6z7GuZ1x7HchxzrJBDnuC8FU1Vh3OJMkjwGOr6o/aPOvAKiqN8y0zqpVq2rt2rVbtL+F0FWj5WPY5DHK7QyTmMf9/2JrYhpFkp+rhfLazVWS86pq1bTLFlBSeCbwpKr60zb/HODRVfXCKfWOBY5tsw8EvreFu9wN+MkWrrtYeczLg8e8PGzNMd+7qlZMt2DBdB8Nq6pOBk7e2u0kWTtTplyqPOblwWNeHkZ1zAvpMReXAXsNzO/ZyiRJY7KQksJXgb2T3CfJ9sCzgDUTjkmSlpUF031UVbckeSHwabpbUt9TVeePcJdb3QW1CHnMy4PHvDyM5JgXzECzJGnyFlL3kSRpwkwKkqTekk8KSZ6U5HtJ1iU5bprlOyQ5vS0/N8nKCYQ5r4Y45hcnuSDJt5KcleTek4hzPs12zAP1npGkkiz62xeHOeYkh7X3+vwkHxh3jPNtiM/2vZJ8LsnX2+f7oEnEOV+SvCfJVUm+M8PyJHlrez2+lWS/rd5pVS3ZP7oB6+8D9wW2B74J7DOlzl8A72jTzwJOn3TcYzjmxwN3bNN/vhyOudW7M/BF4Bxg1aTjHsP7vDfwdeCubf7uk457DMd8MvDnbXof4OJJx72Vx/x7wH7Ad2ZYfhDwb0CA/YFzt3afS72l8ChgXVX9oKpuAj4EHDqlzqHA6jb9EeDAJBljjPNt1mOuqs9V1Q1t9hy674QsZsO8zwCvA/4B+MU4gxuRYY75ecDbquoagKq6aswxzrdhjrmAu7TpnYHLxxjfvKuqLwI/3UyVQ4FTq3MOsEuS3bdmn0s9KewBXDowv76VTVunqm4BrgV2HUt0ozHMMQ86hu5KYzGb9Zhbs3qvqloqD70a5n1+APCAJP+e5Jz2FOLFbJhjPh44Isl64JPAX44ntImZ6//3WS2Y7ylo/JIcAawCHjfpWEYpyR2ANwHPnXAo47YtXRfSAXStwS8meWhVbZxkUCP2bOC9VfXG9pDN9yV5SFX9atKBLRZLvaUwzKMz+jpJtqVrcl49luhGY6jHhST5feBVwCFV9csxxTYqsx3znYGHAJ9PcjFd3+uaRT7YPMz7vB5YU1U3V9UPgf+iSxKL1TDHfAzwYYCq+k9gR7oHxy1V8/54oKWeFIZ5dMYa4Kg2/Uzg7GojOIvUrMec5BHAO+kSwmLvZ4ZZjrmqrq2q3apqZVWtpBtHOaSqtuy56wvDMJ/tj9G1EkiyG1130g/GGON8G+aYfwQcCJDkwXRJYcNYoxyvNcCR7S6k/YFrq+qKrdngku4+qhkenZHktcDaqloDnELXxFxHN6DzrMlFvPWGPOZ/BO4EnNHG1H9UVYdMLOitNOQxLylDHvOngf+e5ALgVuB/VNWibQUPecwvAd6V5EV0g87PXcwXeUk+SJfYd2vjJH8LbAdQVe+gGzc5CFgH3AAcvdX7XMSvlyRpni317iNJ0hyYFCRJPZOCJKlnUpAk9UwKkqSeSUGS1DMpSJJ6/x+eh/5eYN+e+gAAAABJRU5ErkJggg==\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"typeConstDF['violation_ratio'].plot.hist(bins=100).set_title(\"Type Constraint Violation Ratios\")"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "sufficient-hollywood",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Type Constraint Violation Ratios (<=0.05)')"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"typeConstDF[typeConstDF['violation_ratio'] <= 0.05].violation_ratio.plot.hist(bins=100).set_title(\"Type Constraint Violation Ratios (<=0.05)\")"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "minor-marshall",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"No. of constraints whose violation ratio is greater than mean :0/1465\n"
]
}
],
"source": [
"print(f\"No. of constraints whose violation ratio is greater than mean :{sum(typeConstDF['violation_ratio'] >= 5.286054)}/{len(typeConstDF)}\")"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "special-consensus",
"metadata": {},
"outputs": [],
"source": [
"# typeConstDF.sort_values(by=['incorrect'],ascending=False).head(5).paths.values"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "excited-person",
"metadata": {},
"outputs": [],
"source": [
"# !cat ../../allConstraintsAnalysisWRemoved2/typeConstraint/normal/claims.type-constraints.instanceOf.P953.incorrect.tsv"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "revolutionary-violence",
"metadata": {},
"outputs": [],
"source": [
"for key1 in typeConstViolations.keys():\n",
" typeConstViolations[key1]['correct'] = typeConstViolations[key1]['instanceOf']['correct'] + typeConstViolations[key1]['subclass']['correct'] + typeConstViolations[key1]['instanceOfOrSubclass']['correct']\n",
" typeConstViolations[key1]['incorrect'] = typeConstViolations[key1]['instanceOf']['incorrect'] + typeConstViolations[key1]['subclass']['incorrect'] + typeConstViolations[key1]['instanceOfOrSubclass']['incorrect']\n",
" typeConstViolations[key1]['VR'] = typeConstViolations[key1]['incorrect'] / (typeConstViolations[key1]['correct'] + typeConstViolations[key1]['incorrect'])\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "emotional-favorite",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"{'mandatory': {'instanceOf': {'correct': 46304082, 'incorrect': 795451},\n",
" 'subclass': {'correct': 2064, 'incorrect': 53},\n",
" 'instanceOfOrSubclass': {'correct': 233195, 'incorrect': 3169},\n",
" 'propCount': 167,\n",
" 'correct': 46539341,\n",
" 'incorrect': 798673,\n",
" 'VR': 0.01687170484169446},\n",
" 'suggestion': {'instanceOf': {'correct': 61936, 'incorrect': 18751},\n",
" 'subclass': {'correct': 0, 'incorrect': 0},\n",
" 'instanceOfOrSubclass': {'correct': 24237, 'incorrect': 3458},\n",
" 'propCount': 11,\n",
" 'correct': 86173,\n",
" 'incorrect': 22209,\n",
" 'VR': 0.20491410012732741},\n",
" 'normal': {'instanceOf': {'correct': 425646789, 'incorrect': 5275469},\n",
" 'subclass': {'correct': 98826, 'incorrect': 13611},\n",
" 'instanceOfOrSubclass': {'correct': 68370289, 'incorrect': 852276},\n",
" 'propCount': 1287,\n",
" 'correct': 494115904,\n",
" 'incorrect': 6141356,\n",
" 'VR': 0.012276395548962147}}"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"typeConstViolations"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "aggregate-impact",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" violation_ratio \n",
" total \n",
" \n",
" \n",
" \n",
" \n",
" P2093 \n",
" 148843205 \n",
" 927027 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 0.006190 \n",
" 149770232 \n",
" \n",
" \n",
" P1476 \n",
" 44059166 \n",
" 208472 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 0.004709 \n",
" 44267638 \n",
" \n",
" \n",
" P577 \n",
" 39990807 \n",
" 165864 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 0.004130 \n",
" 40156671 \n",
" \n",
" \n",
" P1433 \n",
" 37028672 \n",
" 112955 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 0.003041 \n",
" 37141627 \n",
" \n",
" \n",
" P1215 \n",
" 33425605 \n",
" 316565 \n",
" [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
" 0.009382 \n",
" 33742170 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P2093 148843205 927027 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P1476 44059166 208472 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P577 39990807 165864 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P1433 37028672 112955 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"P1215 33425605 316565 [../../allConstraintsAnalysisWRemoved2/typeCon... \n",
"\n",
" violation_ratio total \n",
"P2093 0.006190 149770232 \n",
"P1476 0.004709 44267638 \n",
"P577 0.004130 40156671 \n",
"P1433 0.003041 37141627 \n",
"P1215 0.009382 33742170 "
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"typeConstDF['total'] = typeConstDF['correct'] + typeConstDF['incorrect']\n",
"typeConstDF.sort_values(by=['total'],ascending=False).head()"
]
},
{
"cell_type": "markdown",
"id": "bearing-kruger",
"metadata": {},
"source": [
"### Find out time required"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "assumed-toner",
"metadata": {},
"outputs": [],
"source": [
"# from tqdm.notebook import tqdm\n",
"# import os.path\n",
"\n",
"# cnt = 0\n",
"# fCnt = 1\n",
"# for prop in tqdm(df1.node1.unique()):\n",
"# try:\n",
"# if not(os.path.isfile(\"../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv\")):\n",
"# continue\n",
"# relation = df1[(df1['node1'] == prop) & (df1['label'] == 'P2309')].node2.values[0][0]\n",
"# type1 = df1[(df1['node1'] == prop) & (df1['label'] == 'P2316')].node2.values\n",
"\n",
"# parents = df1[(df1['node1'] == prop) & (df1['label'] == 'P2308')].node2.values[0]\n",
"# exceptions = df1[(df1['node1'] == prop) & (df1['label'] == 'P2303')].node2.values\n",
"\n",
"# # print(prop, relation, type1, parents, exceptions)\n",
"\n",
"# if relation == \"Q21503252\":\n",
"# parentFile = \"P31P279star\"\n",
"# parentTitle = 'instanceOf'\n",
"# elif relation == \"Q21514624\":\n",
"# parentFile = \"P279star\"\n",
"# parentTitle = 'subclass'\n",
"# else:\n",
"# parentFile = \"isastar\"\n",
"# parentTitle = 'instanceOfOrSubclass'\n",
"\n",
"# if len(type1) != 0 and type1[0][0] == \"Q21502408\":\n",
"# typeVal = \"mandatory\"\n",
"# elif len(type1) != 0 and type1[0][0] == \"Q62026391\":\n",
"# typeVal = \"suggestion\"\n",
"# else:\n",
"# typeVal = \"normal\"\n",
"\n",
"# if len(exceptions):\n",
"# exceptionPart = \"or node1 in \" + str(exceptions[0]).replace(\"'\",'\"')\n",
"# else:\n",
"# exceptionPart = \"\"\n",
" \n",
"# if cnt % 100 == 0:\n",
"# fOP = open(\"../../propertiesSplitWRemoved2/checkViolations/TimedTypeConstraintValidator\" + str(fCnt) + \".sh\",\"w\")\n",
"# fCnt += 1\n",
" \n",
"# fOP.write(\"{ time kgtk --debug query -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
"# ../../wikidata-20210215/derived.\" + parentFile + \".tsv.gz \\\n",
"# --match 'm: (node1)-[nodeProp]->(node2), d: (node1)-[]->(par)' \\\n",
"# --where 'par in \" + str(parents).replace(\"'\",'\"') + \" \" + exceptionPart + \"' \\\n",
"# --return 'nodeProp.id, node1, nodeProp.label, node2' \\\n",
"# -o ../../allConstraintsAnalysisWRemoved2/TimedTypeConstraint/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct.tsv \\\n",
"# --graph-cache ~/sqlite3_caches/const2123_\" + str(fCnt) + \".sqlite3.db; } 2>> ../../propertiesSplitWRemoved2/checkViolations/exec_logs/TimedTypeConstraint_TimedTypeConstraintValidator\" + str(fCnt) + \".txt ; \\\n",
"# kgtk --debug ifnotexists -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
"# --filter-on ../../allConstraintsAnalysisWRemoved2/TimedTypeConstraint/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct.tsv \\\n",
"# --filter-mode NONE \\\n",
"# --input-keys node1 label \\\n",
"# --filter-keys node1 label \\\n",
"# -o ../../allConstraintsAnalysisWRemoved2/TimedTypeConstraint/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect.tsv\\n\")\n",
"\n",
"# cnt += 1\n",
"# except:\n",
"# print(\"Something failed for prop:\",prop)\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 93,
"id": "veterinary-fault",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "52944ea021934d23b3d4ab3fb1f091f7",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/122 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import pandas as pd\n",
"import os\n",
"from tqdm.notebook import tqdm\n",
"\n",
"codepConstViolations = {}\n",
"\n",
"codepConstViolations = {}\n",
"codepConstPropList = set()\n",
"\n",
"def extractTimes(filename):\n",
" times = []\n",
" with open(filename) as f:\n",
" for line in f:\n",
" if \"real\" in line:\n",
" line = line.strip()\n",
" time1 = line.split(\"\\t\")[1]\n",
" mins, sec = time1.split(\"m\")\n",
" mins = int(mins)\n",
" sec = float(sec[:-1])\n",
" times.append(60 * mins + sec)\n",
" return times\n",
"\n",
"# codepConstViolationsSummary = {}\n",
"times = []\n",
"filePath = '/data/wd-correctness/propertiesSplitWRemoved2/checkViolations/exec_logs/'\n",
"for filename in tqdm(os.listdir(filePath)):\n",
" if filename.startswith(\"typeConstraintValidator\"):\n",
" tempTimes = extractTimes(filePath + filename)\n",
" times += tempTimes"
]
},
{
"cell_type": "code",
"execution_count": 94,
"id": "infinite-assembly",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"count 1456.000000\n",
"mean 138.470137\n",
"std 216.121977\n",
"min 2.111000\n",
"25% 23.664500\n",
"50% 43.875000\n",
"75% 158.037250\n",
"max 2177.421000\n",
"dtype: float64\n"
]
}
],
"source": [
"print(pd.Series(times).describe())"
]
},
{
"cell_type": "code",
"execution_count": 95,
"id": "opened-essex",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Distribution of times (in s) taken for type constraint checks')"
]
},
"execution_count": 95,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import seaborn as sns\n",
"sns.lineplot(data=pd.Series(times)).set_title(\"Distribution of times (in s) taken for type constraint checks\")"
]
},
{
"cell_type": "markdown",
"id": "intense-computer",
"metadata": {},
"source": [
"## Value Type Constraint"
]
},
{
"cell_type": "markdown",
"id": "animated-companion",
"metadata": {},
"source": [
"### Understand Constraints File"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "static-profit",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"dfValueType = pd.read_csv('../../constraintsOP/valuetypeConstraint/claims.type-constraints_all1.tsv',sep='\\t')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "worthy-malawi",
"metadata": {},
"outputs": [],
"source": [
"dfValueType = dfValueType.groupby(['node1','label']).node2.apply(lambda p: p.tolist()).reset_index()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "eleven-tiffany",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" node1 \n",
" label \n",
" node2 \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" P1000 \n",
" P2308 \n",
" [Q1241356] \n",
" \n",
" \n",
" 1 \n",
" P1000 \n",
" P2309 \n",
" [Q30208840] \n",
" \n",
" \n",
" 2 \n",
" P1001 \n",
" P2308 \n",
" [Q20926517, Q2881272, Q2882257, Q3624078, Q389... \n",
" \n",
" \n",
" 3 \n",
" P1001 \n",
" P2309 \n",
" [Q30208840] \n",
" \n",
" \n",
" 4 \n",
" P1002 \n",
" P2308 \n",
" [Q2576663] \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" node1 label node2\n",
"0 P1000 P2308 [Q1241356]\n",
"1 P1000 P2309 [Q30208840]\n",
"2 P1001 P2308 [Q20926517, Q2881272, Q2882257, Q3624078, Q389...\n",
"3 P1001 P2309 [Q30208840]\n",
"4 P1002 P2308 [Q2576663]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfValueType.head()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "expired-stuff",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['P2308', 'P2309', 'P2303', 'P2316', 'P6607', 'P2304'], dtype=object)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfValueType['label'].unique()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "imposed-newsletter",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" node1 \n",
" label \n",
" node2 \n",
" \n",
" \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
"Empty DataFrame\n",
"Columns: [node1, label, node2]\n",
"Index: []"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfValueType[dfValueType['label'] == '2316']"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "answering-alabama",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" node1 \n",
" label \n",
" node2 \n",
" \n",
" \n",
" \n",
" \n",
" 330 \n",
" P1659 \n",
" P2308 \n",
" [Q18616576] \n",
" \n",
" \n",
" 331 \n",
" P1659 \n",
" P2309 \n",
" [Q21503252] \n",
" \n",
" \n",
" 332 \n",
" P1659 \n",
" P2316 \n",
" [Q21502408] \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" node1 label node2\n",
"330 P1659 P2308 [Q18616576]\n",
"331 P1659 P2309 [Q21503252]\n",
"332 P1659 P2316 [Q21502408]"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfValueType[dfValueType['node1'] == 'P1659']"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "danish-blackberry",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" node1 \n",
" label \n",
" node2 \n",
" \n",
" \n",
" \n",
" \n",
" 2031 \n",
" P991 \n",
" P2308 \n",
" [Q5, Q7210356] \n",
" \n",
" \n",
" 2032 \n",
" P991 \n",
" P2309 \n",
" [Q21503252] \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" node1 label node2\n",
"2031 P991 P2308 [Q5, Q7210356]\n",
"2032 P991 P2309 [Q21503252]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfValueType[dfValueType.node1 == 'P991']"
]
},
{
"cell_type": "markdown",
"id": "digital-harvard",
"metadata": {},
"source": [
"### Query Generator"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "white-badge",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "080f8e771b7448de82088862b4330e8b",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/932 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Something failed for prop: P1389\n"
]
}
],
"source": [
"from tqdm.notebook import tqdm\n",
"import os.path\n",
"import os\n",
"\n",
"cnt = 0\n",
"fCnt = 1\n",
"for prop in tqdm(dfValueType.node1.unique()):\n",
" try:\n",
" \n",
" if not(os.path.isfile(\"../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv\")):\n",
" continue\n",
" relation = dfValueType[(dfValueType['node1'] == prop) & (dfValueType['label'] == 'P2309')].node2.values[0][0]\n",
" type1 = dfValueType[(dfValueType['node1'] == prop) & (dfValueType['label'] == 'P2316')].node2.values\n",
"# print(type1)\n",
"\n",
" parents = dfValueType[(dfValueType['node1'] == prop) & (dfValueType['label'] == 'P2308')].node2.values[0]\n",
" exceptions = dfValueType[(dfValueType['node1'] == prop) & (dfValueType['label'] == 'P2303')].node2.values\n",
" \n",
" if relation == \"Q21503252\":\n",
" parentFile = \"P31\"\n",
" parentTitle = 'instanceOf'\n",
" elif relation == \"Q21514624\":\n",
" parentFile = \"P279\"\n",
" parentTitle = 'subclass'\n",
" else:\n",
" parentFile = \"isa\"\n",
" parentTitle = 'instanceOfOrSubclass'\n",
"\n",
" if len(type1) != 0 and type1[0][0] == \"Q21502408\":\n",
" typeVal = \"mandatory\"\n",
" elif len(type1) != 0 and type1[0][0] == \"Q62026391\":\n",
" typeVal = \"suggestion\"\n",
" else:\n",
" typeVal = \"normal\"\n",
"\n",
" if len(exceptions):\n",
" exceptionPart = \"or node2 in \" + str(exceptions[0]).replace(\"'\",'\"')\n",
" else:\n",
" exceptionPart = \"\"\n",
" \n",
" folderName = 'valuetypeConstraint_Final4'\n",
" shellFileSuffix = 'valueTypeConstraintValidator'\n",
" \n",
" if cnt % 120 == 0:\n",
" if fOP:\n",
" fOP.close()\n",
" fOP = open(\"../../propertiesSplitWRemoved2/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n",
" fCnt += 1\n",
" \n",
" fOP.write(\"{ time (kgtk --debug query -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
" ../../wikidata-20210215/derived.\" + parentFile + \".tsv.gz \\\n",
" ../../wikidata-20210215/derived.P279star.tsv.gz \\\n",
" --match 'm: (node1)-[nodeProp]->(node2), \" + parentFile + \": (node2)-[]->(nodex), P279star: (nodex)-[]->(par)' \\\n",
" --where 'par in \" + str(parents).replace(\"'\",'\"') + \" \" + exceptionPart + \"' \\\n",
" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct.tsv \\\n",
" --graph-cache ~/sqlite3_caches/const112_\" + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect.tsv ) } 2>> ../../propertiesSplitWRemoved2/checkViolations/exec_logs/\" + shellFileSuffix + str(fCnt) + \".txt;\\n\")\n",
" \n",
" cnt += 1\n",
" except:\n",
" print(\"Something failed for prop:\",prop)\n",
"if fOP:\n",
" fOP.close()"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "qualified-cursor",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"904"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cnt"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "simplified-cameroon",
"metadata": {},
"outputs": [],
"source": [
"# import os\n",
"# for i in range(1,9):\n",
"# os.system(\"screen -dm sh ../../propertiesSplitWRemoved2/checkViolations/valueTypeConstraintValidator\"+str(i)+\".sh\")\n",
" "
]
},
{
"cell_type": "markdown",
"id": "spectacular-warner",
"metadata": {},
"source": [
"### Analyze Violations"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "valid-defense",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "38d78b0ecfdc40f596565c00c4b4fbd8",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"0it [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "cf62ec681d004b5c84cbcfa4e5968788",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/216 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "270c9b2cc46942e7a49ebbe8229d0c05",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/10 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "80e5db4693de41a58c82f0c03c2bfb61",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/1582 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import pandas as pd\n",
"import os\n",
"from tqdm.notebook import tqdm\n",
"\n",
"valueTypeConstViolations = {}\n",
"\n",
"def countLines(fname):\n",
" cnt = -1\n",
" with open(fname, 'r') as f:\n",
" for line in f:\n",
" cnt += 1\n",
" return cnt\n",
"\n",
"valueTypePropList = set()\n",
"\n",
"violations = {}\n",
"\n",
"for folder in tqdm(iter(['mandatory', 'suggestion', 'normal'])):\n",
" valueTypeConstViolations[folder] = {'instanceOf': {'correct': 0, 'incorrect': 0}, 'subclass': {'correct': 0, 'incorrect': 0}, 'instanceOfOrSubclass': {'correct': 0, 'incorrect': 0}, 'propCount':0}\n",
" filePath = \"../../allConstraintsAnalysisWRemoved2/valuetypeConstraint_Final4/\"+folder+\"/\"\n",
" for filename in tqdm(os.listdir(filePath)):\n",
" type1 = filename.split(\".\")[2]\n",
" prop = filename.split(\".\")[3]\n",
" valueTypePropList.add(prop)\n",
" correctness = filename.split(\".\")[4]\n",
" count1 = countLines(filePath+filename)\n",
" valueTypeConstViolations[folder][type1][correctness] += count1\n",
" if prop not in violations:\n",
" violations[prop] = {'correct': 0, 'incorrect': 0, 'paths': []}\n",
" violations[prop][correctness] = count1\n",
" violations[prop]['paths'].append(filePath+filename)\n",
" if correctness == 'correct':\n",
" valueTypeConstViolations[folder]['propCount'] += 1\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "experienced-quick",
"metadata": {},
"outputs": [],
"source": [
"# countLines(\"../../allConstraintsAnalysisWRemoved2/typeConstraint/mandatory/claims.type-constraints.subclass.P534.incorrect.tsv\")"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "refined-speaking",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"904 properties processed for value type constraint for 189304521 statements\n"
]
}
],
"source": [
"recordCount = 0\n",
"for elem in valueTypeConstViolations.keys():\n",
" for key1 in valueTypeConstViolations[elem].keys():\n",
" try:\n",
" recordCount += valueTypeConstViolations[elem][key1]['correct'] + valueTypeConstViolations[elem][key1]['incorrect']\n",
" except:\n",
" continue\n",
"print(f\"{len(valueTypePropList)} properties processed for value type constraint for {recordCount} statements\")"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "designed-christian",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"valTypeConstDF = pd.DataFrame(violations).T"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "spare-hawaiian",
"metadata": {},
"outputs": [],
"source": [
"valTypeConstDF['violation_ratio'] = valTypeConstDF.apply(lambda p: p.incorrect / (p.incorrect + p.correct), axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "provincial-diploma",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" violation_ratio \n",
" \n",
" \n",
" \n",
" \n",
" P852 \n",
" 4526 \n",
" 4 \n",
" [../../allConstraintsAnalysisWRemoved2/valuety... \n",
" 0.000883 \n",
" \n",
" \n",
" P853 \n",
" 1600 \n",
" 4 \n",
" [../../allConstraintsAnalysisWRemoved2/valuety... \n",
" 0.002494 \n",
" \n",
" \n",
" P2302 \n",
" 47918 \n",
" 26 \n",
" [../../allConstraintsAnalysisWRemoved2/valuety... \n",
" 0.000542 \n",
" \n",
" \n",
" P3092 \n",
" 7534 \n",
" 7 \n",
" [../../allConstraintsAnalysisWRemoved2/valuety... \n",
" 0.000928 \n",
" \n",
" \n",
" P3096 \n",
" 11193 \n",
" 10 \n",
" [../../allConstraintsAnalysisWRemoved2/valuety... \n",
" 0.000893 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P852 4526 4 [../../allConstraintsAnalysisWRemoved2/valuety... \n",
"P853 1600 4 [../../allConstraintsAnalysisWRemoved2/valuety... \n",
"P2302 47918 26 [../../allConstraintsAnalysisWRemoved2/valuety... \n",
"P3092 7534 7 [../../allConstraintsAnalysisWRemoved2/valuety... \n",
"P3096 11193 10 [../../allConstraintsAnalysisWRemoved2/valuety... \n",
"\n",
" violation_ratio \n",
"P852 0.000883 \n",
"P853 0.002494 \n",
"P2302 0.000542 \n",
"P3092 0.000928 \n",
"P3096 0.000893 "
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"valTypeConstDF.head()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "neural-trail",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" violation_ratio \n",
" \n",
" \n",
" \n",
" \n",
" P5008 \n",
" 0 \n",
" 341961 \n",
" [../../allConstraintsAnalysisWRemoved2/valuety... \n",
" 1.0 \n",
" \n",
" \n",
" P6104 \n",
" 0 \n",
" 9808 \n",
" [../../allConstraintsAnalysisWRemoved2/valuety... \n",
" 1.0 \n",
" \n",
" \n",
" P2545 \n",
" 0 \n",
" 1378 \n",
" [../../allConstraintsAnalysisWRemoved2/valuety... \n",
" 1.0 \n",
" \n",
" \n",
" P2668 \n",
" 0 \n",
" 179 \n",
" [../../allConstraintsAnalysisWRemoved2/valuety... \n",
" 1.0 \n",
" \n",
" \n",
" P7374 \n",
" 0 \n",
" 44 \n",
" [../../allConstraintsAnalysisWRemoved2/valuety... \n",
" 1.0 \n",
" \n",
" \n",
" P3028 \n",
" 0 \n",
" 15 \n",
" [../../allConstraintsAnalysisWRemoved2/valuety... \n",
" 1.0 \n",
" \n",
" \n",
" P2839 \n",
" 0 \n",
" 15 \n",
" [../../allConstraintsAnalysisWRemoved2/valuety... \n",
" 1.0 \n",
" \n",
" \n",
" P3027 \n",
" 0 \n",
" 13 \n",
" [../../allConstraintsAnalysisWRemoved2/valuety... \n",
" 1.0 \n",
" \n",
" \n",
" P2127 \n",
" 0 \n",
" 12 \n",
" [../../allConstraintsAnalysisWRemoved2/valuety... \n",
" 1.0 \n",
" \n",
" \n",
" P538 \n",
" 0 \n",
" 10 \n",
" [../../allConstraintsAnalysisWRemoved2/valuety... \n",
" 1.0 \n",
" \n",
" \n",
" P2241 \n",
" 0 \n",
" 6 \n",
" [../../allConstraintsAnalysisWRemoved2/valuety... \n",
" 1.0 \n",
" \n",
" \n",
" P4425 \n",
" 0 \n",
" 6 \n",
" [../../allConstraintsAnalysisWRemoved2/valuety... \n",
" 1.0 \n",
" \n",
" \n",
" P6191 \n",
" 0 \n",
" 5 \n",
" [../../allConstraintsAnalysisWRemoved2/valuety... \n",
" 1.0 \n",
" \n",
" \n",
" P6533 \n",
" 0 \n",
" 5 \n",
" [../../allConstraintsAnalysisWRemoved2/valuety... \n",
" 1.0 \n",
" \n",
" \n",
" P6534 \n",
" 0 \n",
" 5 \n",
" [../../allConstraintsAnalysisWRemoved2/valuety... \n",
" 1.0 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P5008 0 341961 [../../allConstraintsAnalysisWRemoved2/valuety... \n",
"P6104 0 9808 [../../allConstraintsAnalysisWRemoved2/valuety... \n",
"P2545 0 1378 [../../allConstraintsAnalysisWRemoved2/valuety... \n",
"P2668 0 179 [../../allConstraintsAnalysisWRemoved2/valuety... \n",
"P7374 0 44 [../../allConstraintsAnalysisWRemoved2/valuety... \n",
"P3028 0 15 [../../allConstraintsAnalysisWRemoved2/valuety... \n",
"P2839 0 15 [../../allConstraintsAnalysisWRemoved2/valuety... \n",
"P3027 0 13 [../../allConstraintsAnalysisWRemoved2/valuety... \n",
"P2127 0 12 [../../allConstraintsAnalysisWRemoved2/valuety... \n",
"P538 0 10 [../../allConstraintsAnalysisWRemoved2/valuety... \n",
"P2241 0 6 [../../allConstraintsAnalysisWRemoved2/valuety... \n",
"P4425 0 6 [../../allConstraintsAnalysisWRemoved2/valuety... \n",
"P6191 0 5 [../../allConstraintsAnalysisWRemoved2/valuety... \n",
"P6533 0 5 [../../allConstraintsAnalysisWRemoved2/valuety... \n",
"P6534 0 5 [../../allConstraintsAnalysisWRemoved2/valuety... \n",
"\n",
" violation_ratio \n",
"P5008 1.0 \n",
"P6104 1.0 \n",
"P2545 1.0 \n",
"P2668 1.0 \n",
"P7374 1.0 \n",
"P3028 1.0 \n",
"P2839 1.0 \n",
"P3027 1.0 \n",
"P2127 1.0 \n",
"P538 1.0 \n",
"P2241 1.0 \n",
"P4425 1.0 \n",
"P6191 1.0 \n",
"P6533 1.0 \n",
"P6534 1.0 "
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"valTypeConstDF.sort_values(by=['violation_ratio','incorrect'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "cutting-polyester",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"count 904.000000\n",
"mean 0.098485\n",
"std 0.214803\n",
"min 0.000000\n",
"25% 0.001492\n",
"50% 0.011225\n",
"75% 0.063950\n",
"max 1.000000\n",
"Name: violation_ratio, dtype: float64"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"valTypeConstDF['violation_ratio'].describe()"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "alert-receiver",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Value Type Constraint Violation Ratios')"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"valTypeConstDF['violation_ratio'].plot.hist(bins=100).set_title(\"Value Type Constraint Violation Ratios\")"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "italian-motel",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Value Type Constraint Violation Ratios (<=0.04)')"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"valTypeConstDF[valTypeConstDF['violation_ratio'] <= 0.04].violation_ratio.plot.hist(bins=100).set_title(\"Value Type Constraint Violation Ratios (<=0.04)\")"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "prescription-ceramic",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"No. of constraints whose violation ratio is greater than mean :0/904\n"
]
}
],
"source": [
"print(f\"No. of constraints whose violation ratio is greater than mean :{sum(valTypeConstDF['violation_ratio'] >= 3.950680)}/{len(valTypeConstDF)}\")"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "quiet-gardening",
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"# valTypeConstDF.sort_values(by=['violation_ratio'],ascending=False).head().paths.values"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "documentary-pipeline",
"metadata": {},
"outputs": [],
"source": [
"# !head ../../allConstraintsAnalysisWRemoved2/typeConstraint/normal/claims.type-constraints.instanceOf.P7535.incorrect.tsv"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "tutorial-mineral",
"metadata": {},
"outputs": [],
"source": [
"for key1 in valueTypeConstViolations.keys():\n",
" valueTypeConstViolations[key1]['correct'] = valueTypeConstViolations[key1]['instanceOf']['correct'] + valueTypeConstViolations[key1]['subclass']['correct'] + valueTypeConstViolations[key1]['instanceOfOrSubclass']['correct']\n",
" valueTypeConstViolations[key1]['incorrect'] = valueTypeConstViolations[key1]['instanceOf']['incorrect'] + valueTypeConstViolations[key1]['subclass']['incorrect'] + valueTypeConstViolations[key1]['instanceOfOrSubclass']['incorrect']\n",
" valueTypeConstViolations[key1]['VR'] = valueTypeConstViolations[key1]['incorrect'] / (valueTypeConstViolations[key1]['correct'] + valueTypeConstViolations[key1]['incorrect'])\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "satellite-concern",
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'mandatory': {'instanceOf': {'correct': 11564885, 'incorrect': 8245},\n",
" 'subclass': {'correct': 55983, 'incorrect': 28},\n",
" 'instanceOfOrSubclass': {'correct': 13090, 'incorrect': 137},\n",
" 'propCount': 108,\n",
" 'correct': 11633958,\n",
" 'incorrect': 8410,\n",
" 'VR': 0.0007223616363956198},\n",
" 'suggestion': {'instanceOf': {'correct': 46189, 'incorrect': 659},\n",
" 'subclass': {'correct': 127, 'incorrect': 20},\n",
" 'instanceOfOrSubclass': {'correct': 0, 'incorrect': 0},\n",
" 'propCount': 5,\n",
" 'correct': 46316,\n",
" 'incorrect': 679,\n",
" 'VR': 0.01444834556867752},\n",
" 'normal': {'instanceOf': {'correct': 94112173, 'incorrect': 842434},\n",
" 'subclass': {'correct': 4674914, 'incorrect': 9777},\n",
" 'instanceOfOrSubclass': {'correct': 77686561, 'incorrect': 289299},\n",
" 'propCount': 791,\n",
" 'correct': 176473648,\n",
" 'incorrect': 1141510,\n",
" 'VR': 0.006426872643381034}}"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"valueTypeConstViolations"
]
},
{
"cell_type": "markdown",
"id": "traditional-shakespeare",
"metadata": {},
"source": [
"### Find out time required"
]
},
{
"cell_type": "code",
"execution_count": 78,
"id": "spoken-symphony",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "878ab763f4fa4cb9a540c8bf86ea76ec",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/297 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import pandas as pd\n",
"import os\n",
"from tqdm.notebook import tqdm\n",
"\n",
"codepConstViolations = {}\n",
"\n",
"codepConstViolations = {}\n",
"codepConstPropList = set()\n",
"\n",
"def extractTimes(filename):\n",
" times = []\n",
" with open(filename) as f:\n",
" for line in f:\n",
" if \"real\" in line:\n",
" line = line.strip()\n",
" time1 = line.split(\"\\t\")[1]\n",
" mins, sec = time1.split(\"m\")\n",
" mins = int(mins)\n",
" sec = float(sec[:-1])\n",
" times.append(60 * mins + sec)\n",
" return times\n",
"\n",
"# codepConstViolationsSummary = {}\n",
"times = []\n",
"filePath = '/data/wd-correctness/propertiesSplitWRemoved2/checkViolations/exec_logs/'\n",
"for filename in tqdm(os.listdir(filePath)):\n",
" if filename.startswith(\"valueTypeConstraintValidator_xverify3\"):\n",
" tempTimes = extractTimes(filePath + filename)\n",
" times += tempTimes"
]
},
{
"cell_type": "code",
"execution_count": 79,
"id": "heavy-argentina",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"count 897.000000\n",
"mean 41.756467\n",
"std 133.639231\n",
"min 1.516000\n",
"25% 3.236000\n",
"50% 6.851000\n",
"75% 24.280000\n",
"max 1683.328000\n",
"dtype: float64\n"
]
}
],
"source": [
"print(pd.Series(times).describe())"
]
},
{
"cell_type": "code",
"execution_count": 80,
"id": "organized-mixer",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Distribution of times (in s) taken for value type constraint checks')"
]
},
"execution_count": 80,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import seaborn as sns\n",
"sns.lineplot(data=pd.Series(times)).set_title(\"Distribution of times (in s) taken for value type constraint checks\")"
]
},
{
"cell_type": "markdown",
"id": "motivated-sympathy",
"metadata": {},
"source": [
"## Item Requires Statement Constraint"
]
},
{
"cell_type": "markdown",
"id": "chubby-glass",
"metadata": {},
"source": [
"### Understand Constraints File"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "funny-batch",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import math\n",
"dfItemRequires = pd.read_csv('../../constraintsOP/itemRequiresConstraint/claims.type-constraints_all.tsv',sep='\\t')"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "original-expression",
"metadata": {},
"outputs": [],
"source": [
"dfItemRequires = dfItemRequires.groupby(['id','node1','label']).node2.apply(lambda p: p.tolist()).reset_index()"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "adequate-symphony",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['P2306', 'P2305', 'P2316', 'P2304', 'P2303', 'P6607', 'P4155',\n",
" 'P31', 'P2916', 'P4680', 'P2308'], dtype=object)"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires['label'].unique()"
]
},
{
"cell_type": "code",
"execution_count": 38,
"id": "infrared-canal",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"P2306 7182\n",
"P2305 2540\n",
"P2316 2523\n",
"P2303 422\n",
"P6607 14\n",
"P2304 14\n",
"P2916 5\n",
"P4680 2\n",
"P4155 1\n",
"P2308 1\n",
"P31 1\n",
"Name: label, dtype: int64"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires['label'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "focused-karen",
"metadata": {},
"outputs": [],
"source": [
"#Reference: https://stackoverflow.com/a/17298454\n",
"# dfItemRequires.pivot_table('node2', ['node1', 'id'], 'label')\n",
"dfItemRequires = dfItemRequires.pivot(index=['node1','id'], columns='label', values='node2')"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "private-boundary",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" label \n",
" P2303 \n",
" P2304 \n",
" P2305 \n",
" P2306 \n",
" P2308 \n",
" P2316 \n",
" P2916 \n",
" P31 \n",
" P4155 \n",
" P4680 \n",
" P6607 \n",
" \n",
" \n",
" node1 \n",
" id \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" P1006 \n",
" P1006-P2302-Q21503247-0451ef47-0 \n",
" NaN \n",
" NaN \n",
" NaN \n",
" [P214] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P1010 \n",
" P1010-P2302-Q21503247-56183614-0 \n",
" NaN \n",
" NaN \n",
" NaN \n",
" [P31] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P1010-P2302-Q21503247-fd256eaf-0 \n",
" NaN \n",
" NaN \n",
" [Q794] \n",
" [P17] \n",
" NaN \n",
" [Q21502408] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P1015 \n",
" P1015-P2302-Q21503247-20e3bfc5-0 \n",
" NaN \n",
" NaN \n",
" NaN \n",
" [P31] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P1017 \n",
" P1017-P2302-Q21503247-bbac2ce3-0 \n",
" NaN \n",
" NaN \n",
" NaN \n",
" [P214] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
"label P2303 P2304 P2305 P2306 P2308 \\\n",
"node1 id \n",
"P1006 P1006-P2302-Q21503247-0451ef47-0 NaN NaN NaN [P214] NaN \n",
"P1010 P1010-P2302-Q21503247-56183614-0 NaN NaN NaN [P31] NaN \n",
" P1010-P2302-Q21503247-fd256eaf-0 NaN NaN [Q794] [P17] NaN \n",
"P1015 P1015-P2302-Q21503247-20e3bfc5-0 NaN NaN NaN [P31] NaN \n",
"P1017 P1017-P2302-Q21503247-bbac2ce3-0 NaN NaN NaN [P214] NaN \n",
"\n",
"label P2316 P2916 P31 P4155 P4680 \\\n",
"node1 id \n",
"P1006 P1006-P2302-Q21503247-0451ef47-0 NaN NaN NaN NaN NaN \n",
"P1010 P1010-P2302-Q21503247-56183614-0 NaN NaN NaN NaN NaN \n",
" P1010-P2302-Q21503247-fd256eaf-0 [Q21502408] NaN NaN NaN NaN \n",
"P1015 P1015-P2302-Q21503247-20e3bfc5-0 NaN NaN NaN NaN NaN \n",
"P1017 P1017-P2302-Q21503247-bbac2ce3-0 NaN NaN NaN NaN NaN \n",
"\n",
"label P6607 \n",
"node1 id \n",
"P1006 P1006-P2302-Q21503247-0451ef47-0 NaN \n",
"P1010 P1010-P2302-Q21503247-56183614-0 NaN \n",
" P1010-P2302-Q21503247-fd256eaf-0 NaN \n",
"P1015 P1015-P2302-Q21503247-20e3bfc5-0 NaN \n",
"P1017 P1017-P2302-Q21503247-bbac2ce3-0 NaN "
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires.head()"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "conceptual-schedule",
"metadata": {},
"outputs": [],
"source": [
"dfItemRequires = dfItemRequires.droplevel(1)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "third-hayes",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" label \n",
" P2303 \n",
" P2304 \n",
" P2305 \n",
" P2306 \n",
" P2308 \n",
" P2316 \n",
" P2916 \n",
" P31 \n",
" P4155 \n",
" P4680 \n",
" P6607 \n",
" \n",
" \n",
" node1 \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" P1006 \n",
" NaN \n",
" NaN \n",
" NaN \n",
" [P214] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P1010 \n",
" NaN \n",
" NaN \n",
" NaN \n",
" [P31] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P1010 \n",
" NaN \n",
" NaN \n",
" [Q794] \n",
" [P17] \n",
" NaN \n",
" [Q21502408] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P1015 \n",
" NaN \n",
" NaN \n",
" NaN \n",
" [P31] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P1017 \n",
" NaN \n",
" NaN \n",
" NaN \n",
" [P214] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
"label P2303 P2304 P2305 P2306 P2308 P2316 P2916 P31 P4155 P4680 \\\n",
"node1 \n",
"P1006 NaN NaN NaN [P214] NaN NaN NaN NaN NaN NaN \n",
"P1010 NaN NaN NaN [P31] NaN NaN NaN NaN NaN NaN \n",
"P1010 NaN NaN [Q794] [P17] NaN [Q21502408] NaN NaN NaN NaN \n",
"P1015 NaN NaN NaN [P31] NaN NaN NaN NaN NaN NaN \n",
"P1017 NaN NaN NaN [P214] NaN NaN NaN NaN NaN NaN \n",
"\n",
"label P6607 \n",
"node1 \n",
"P1006 NaN \n",
"P1010 NaN \n",
"P1010 NaN \n",
"P1015 NaN \n",
"P1017 NaN "
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires.head()"
]
},
{
"cell_type": "markdown",
"id": "shaped-companion",
"metadata": {},
"source": [
"However, there is one anomaly where the property does not have a co-dependency constraint associated with it, but still has a link to this constraint."
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "indian-journal",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" label \n",
" P2303 \n",
" P2304 \n",
" P2305 \n",
" P2306 \n",
" P2308 \n",
" P2316 \n",
" P2916 \n",
" P31 \n",
" P4155 \n",
" P4680 \n",
" P6607 \n",
" \n",
" \n",
" node1 \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" P5447 \n",
" NaN \n",
" NaN \n",
" [Q55426051] \n",
" [P5446] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" [Q46466783] \n",
" NaN \n",
" \n",
" \n",
" P5448 \n",
" NaN \n",
" NaN \n",
" [Q55426051] \n",
" [P5446] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" [Q46466783] \n",
" NaN \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
"label P2303 P2304 P2305 P2306 P2308 P2316 P2916 P31 P4155 \\\n",
"node1 \n",
"P5447 NaN NaN [Q55426051] [P5446] NaN NaN NaN NaN NaN \n",
"P5448 NaN NaN [Q55426051] [P5446] NaN NaN NaN NaN NaN \n",
"\n",
"label P4680 P6607 \n",
"node1 \n",
"P5447 [Q46466783] NaN \n",
"P5448 [Q46466783] NaN "
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires[dfItemRequires['P4680'].apply(lambda p: type(p) == list)]"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "discrete-template",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" label \n",
" P2303 \n",
" P2304 \n",
" P2305 \n",
" P2306 \n",
" P2308 \n",
" P2316 \n",
" P2916 \n",
" P31 \n",
" P4155 \n",
" P4680 \n",
" P6607 \n",
" \n",
" \n",
" node1 \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" P1010 \n",
" NaN \n",
" NaN \n",
" [Q794] \n",
" [P17] \n",
" NaN \n",
" [Q21502408] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P1045 \n",
" NaN \n",
" NaN \n",
" [Q20808382, Q28218485, Q3044918] \n",
" [P39] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P1045 \n",
" NaN \n",
" NaN \n",
" [Q82955] \n",
" [P106] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P1045 \n",
" NaN \n",
" NaN \n",
" [Q5] \n",
" [P31] \n",
" NaN \n",
" [Q21502408] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P1045 \n",
" NaN \n",
" NaN \n",
" [Q142, Q71084] \n",
" [P27] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" P980 \n",
" NaN \n",
" NaN \n",
" [Q34] \n",
" [P17] \n",
" NaN \n",
" [Q21502408] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P981 \n",
" NaN \n",
" NaN \n",
" [Q55] \n",
" [P17] \n",
" NaN \n",
" [Q21502408] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P981 \n",
" NaN \n",
" NaN \n",
" [Q1852859] \n",
" [P31] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P988 \n",
" NaN \n",
" NaN \n",
" [Q928] \n",
" [P17] \n",
" NaN \n",
" [Q21502408] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P990 \n",
" [Q49678, Q853715] \n",
" NaN \n",
" [Q5] \n",
" [P31] \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
"
\n",
"
2540 rows × 11 columns
\n",
"
"
],
"text/plain": [
"label P2303 P2304 P2305 P2306 \\\n",
"node1 \n",
"P1010 NaN NaN [Q794] [P17] \n",
"P1045 NaN NaN [Q20808382, Q28218485, Q3044918] [P39] \n",
"P1045 NaN NaN [Q82955] [P106] \n",
"P1045 NaN NaN [Q5] [P31] \n",
"P1045 NaN NaN [Q142, Q71084] [P27] \n",
"... ... ... ... ... \n",
"P980 NaN NaN [Q34] [P17] \n",
"P981 NaN NaN [Q55] [P17] \n",
"P981 NaN NaN [Q1852859] [P31] \n",
"P988 NaN NaN [Q928] [P17] \n",
"P990 [Q49678, Q853715] NaN [Q5] [P31] \n",
"\n",
"label P2308 P2316 P2916 P31 P4155 P4680 P6607 \n",
"node1 \n",
"P1010 NaN [Q21502408] NaN NaN NaN NaN NaN \n",
"P1045 NaN NaN NaN NaN NaN NaN NaN \n",
"P1045 NaN NaN NaN NaN NaN NaN NaN \n",
"P1045 NaN [Q21502408] NaN NaN NaN NaN NaN \n",
"P1045 NaN NaN NaN NaN NaN NaN NaN \n",
"... ... ... ... ... ... ... ... \n",
"P980 NaN [Q21502408] NaN NaN NaN NaN NaN \n",
"P981 NaN [Q21502408] NaN NaN NaN NaN NaN \n",
"P981 NaN NaN NaN NaN NaN NaN NaN \n",
"P988 NaN [Q21502408] NaN NaN NaN NaN NaN \n",
"P990 NaN NaN NaN NaN NaN NaN NaN \n",
"\n",
"[2540 rows x 11 columns]"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires[dfItemRequires['P2305'].apply(lambda p: type(p) == list)]"
]
},
{
"cell_type": "markdown",
"id": "forced-christmas",
"metadata": {},
"source": [
"### Query Generator"
]
},
{
"cell_type": "markdown",
"id": "acquired-floor",
"metadata": {},
"source": [
"#### Version 1 - Mandatory + Suggestion + Normal"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "turkish-establishment",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "28d37088e10e43daa81f2da30f5d8be3",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/3147 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"File: ../../propertiesSplitWRemoved2/claims.P345.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P2604.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P1566.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P1566.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P2355.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P3350.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P1014.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P2636.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P1771.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P2755.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P8326.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P5128.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P1627.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P954.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P498.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P1297.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P8680.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P715.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P2606.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P8303.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P1874.tsv does not exist\n"
]
}
],
"source": [
"from tqdm.notebook import tqdm\n",
"import os.path\n",
"import os\n",
"\n",
"cnt = 0\n",
"fCnt = 0\n",
"\n",
"folderName = 'codependencyConstraint_Final'\n",
"subFolderName = \"Mand_Sugg_Normal\"\n",
"shellFileSuffix = 'codepConst_MSN_Validator_new2_'\n",
"graph_cache_file_prefix = \"codep_new3_001_\"\n",
"\n",
"for prop in tqdm(dfItemRequires.index.unique()):\n",
"# try:\n",
" mandatory = []\n",
" suggestion = []\n",
" normal = []\n",
" prop = str(prop)\n",
" \n",
" for _, constraint in dfItemRequires.loc[[prop]].iterrows():\n",
" if type(constraint['P2316']) == list:\n",
" if constraint['P2316'][0] == 'Q21502408':\n",
" mandatory.append(constraint)\n",
" elif constraint['P2316'][0] == 'Q62026391':\n",
" suggestion.append(constraint)\n",
" else:\n",
" normal.append(constraint)\n",
" \n",
" if not(os.path.isfile(\"../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv\")):\n",
" continue\n",
" \n",
" commandInit = \"{ time ( kgtk --debug query -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \"\n",
" commandOtherFiles = \"\"\n",
" commandMatch = \"--match '\"\n",
" commandMatchMoreFiles = [f\"{prop}: (node1)-[nodeProp]->(node2)\"]\n",
" commandWhere = \" --where '\"\n",
" commandWhere = []\n",
" \n",
" # Version 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n",
" constSet = mandatory + suggestion + normal\n",
" \n",
" if len(constSet) == 0:\n",
" continue\n",
" excptns = set()\n",
" for (rowNo, constraint) in enumerate(constSet):\n",
" prop2 = constraint['P2306']\n",
" \n",
" if type(prop2) != list:\n",
" continue\n",
" prop2 = prop2[0]\n",
" \n",
" if not(os.path.isfile(\"../../propertiesSplitWRemoved2/claims.\"+ prop2 +\".tsv\")):\n",
" print(f\"File: ../../propertiesSplitWRemoved2/claims.{prop2}.tsv does not exist\")\n",
" continue\n",
" \n",
" commandOtherFiles += \"../../propertiesSplitWRemoved2/claims.\"+ prop2 +\".tsv \"\n",
" if type(constraint['P2303']) == list: # Exceptions present\n",
" if len(excptns) == 0:\n",
" excptns = set(constraint['P2303'])\n",
" else:\n",
" excptns = excptns.intersection(set(constraint['P2303']))\n",
" if type(constraint['P2305']) == list:\n",
" commandMatchMoreFiles += [f\"{prop2}: (node1)-[]->(node2_{prop2})\"]\n",
" commandWhere += [\"node2_\" + prop2 + \" in \" + str(list(constraint['P2305'])).replace(\"'\",'\"')]\n",
" else:\n",
" commandMatchMoreFiles += [f\"{prop2}: (node1)-[]->()\"]\n",
"# print(commandMatchMoreFiles)\n",
" if len(commandWhere) == 0:\n",
" command = commandInit + commandOtherFiles + commandMatch + (\", \".join(commandMatchMoreFiles)) + \"'\"\n",
" else:\n",
" command = commandInit + commandOtherFiles + commandMatch + (\", \".join(commandMatchMoreFiles)) + \"'\" + \" --where '\"+(\" and \".join(commandWhere))+\"'\"\n",
" \n",
" if cnt % 100 == 0:\n",
" if fOP:\n",
" fOP.close()\n",
" fCnt += 1\n",
" fOP = open(\"../../propertiesSplitWRemoved2/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n",
" \n",
" if len(excptns) == 0:\n",
" commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplitWRemoved2/checkViolations/exec_logs/timeLog_\" + shellFileSuffix + str(fCnt) + \".txt;\\n\"\n",
" fOP.write(command)\n",
" else:\n",
" commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect_wo_exceptions.tsv\\n\"\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk --debug query -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \"\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk --debug ifnotexists -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk cat -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplitWRemoved2/checkViolations/exec_logs/timeLog_\" + shellFileSuffix + str(fCnt) + \".txt; \\n\"\n",
" fOP.write(command)\n",
" \n",
" \n",
" cnt += 1\n",
"# except:\n",
"# print(\"Something failed for prop:\",prop)\n",
"if fOP:\n",
" fOP.close()"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "peripheral-herald",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"534"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cnt"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "incorporated-logistics",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"6"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fCnt"
]
},
{
"cell_type": "code",
"execution_count": 123,
"id": "welcome-welding",
"metadata": {},
"outputs": [],
"source": [
"# from tqdm.notebook import tqdm\n",
"# import os.path\n",
"# import os\n",
"# folderName = 'codependencyConstraint'\n",
"# for prop in tqdm(dfItemRequires.index.unique()):\n",
"# for subFolderName in ['Mand_Sugg_Normal', 'Mand_Normal', 'Mand', 'Normal']:\n",
"# if os.path.isfile(\"../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv\") and \\\n",
"# os.path.isfile(\"../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv\"):\n",
"# os.system(\"kgtk cat -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n",
"# ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n",
"# -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_w_exceptions.tsv\")"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "optimum-blowing",
"metadata": {},
"outputs": [],
"source": [
"# import os\n",
"# for i in range(1,28):\n",
"# os.system(\"screen -dm sh ../../propertiesSplitWRemoved2/checkViolations/codepConst_MSN_Validator_new2_\"+str(i)+\".sh\")"
]
},
{
"cell_type": "markdown",
"id": "indoor-verse",
"metadata": {},
"source": [
"#### Version 2 - Mandatory + Normal"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "furnished-paradise",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "2c4f963cc8324623abcb436adbc83b2b",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/3147 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"File: ../../propertiesSplitWRemoved2/claims.P345.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P2604.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P1566.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P2355.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P1014.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P2636.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P1771.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P2755.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P8326.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P1627.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P954.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P498.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P1297.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P8680.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P715.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P2606.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P8303.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P1874.tsv does not exist\n"
]
}
],
"source": [
"from tqdm.notebook import tqdm\n",
"import os.path\n",
"import os\n",
"\n",
"cnt = 0\n",
"fCnt = 0\n",
"\n",
"folderName = 'codependencyConstraint_Final'\n",
"subFolderName = \"Mand_Normal\"\n",
"shellFileSuffix = 'codepConst_MN_Validator_new2_'\n",
"graph_cache_file_prefix = \"codep_new3_02_\"\n",
"\n",
"for prop in tqdm(dfItemRequires.index.unique()):\n",
"# try:\n",
" mandatory = []\n",
" suggestion = []\n",
" normal = []\n",
" prop = str(prop)\n",
" \n",
" for _, constraint in dfItemRequires.loc[[prop]].iterrows():\n",
" if type(constraint['P2316']) == list:\n",
" if constraint['P2316'][0] == 'Q21502408':\n",
" mandatory.append(constraint)\n",
" elif constraint['P2316'][0] == 'Q62026391':\n",
" suggestion.append(constraint)\n",
" else:\n",
" normal.append(constraint)\n",
" \n",
" if not(os.path.isfile(\"../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv\")):\n",
" continue\n",
" \n",
" commandInit = \"{ time ( kgtk --debug query -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \"\n",
" commandOtherFiles = \"\"\n",
" commandMatch = \"--match '\"\n",
" commandMatchMoreFiles = [f\"{prop}: (node1)-[nodeProp]->(node2)\"]\n",
" commandWhere = \" --where '\"\n",
" commandWhere = []\n",
" \n",
" # Version 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n",
" constSet = mandatory + normal\n",
" \n",
" if len(constSet) == 0:\n",
" continue\n",
" excptns = set()\n",
" for (rowNo, constraint) in enumerate(constSet):\n",
" prop2 = constraint['P2306']\n",
" \n",
" if type(prop2) != list:\n",
" continue\n",
" prop2 = prop2[0]\n",
" \n",
" if not(os.path.isfile(\"../../propertiesSplitWRemoved2/claims.\"+ prop2 +\".tsv\")):\n",
" print(f\"File: ../../propertiesSplitWRemoved2/claims.{prop2}.tsv does not exist\")\n",
" continue\n",
" \n",
" commandOtherFiles += \"../../propertiesSplitWRemoved2/claims.\"+ prop2 +\".tsv \"\n",
" if type(constraint['P2303']) == list: # Exceptions present\n",
" if len(excptns) == 0:\n",
" excptns = set(constraint['P2303'])\n",
" else:\n",
" excptns = excptns.intersection(set(constraint['P2303']))\n",
" if type(constraint['P2305']) == list:\n",
" commandMatchMoreFiles += [f\"{prop2}: (node1)-[]->(node2_{prop2})\"]\n",
" commandWhere += [\"node2_\" + prop2 + \" in \" + str(list(constraint['P2305'])).replace(\"'\",'\"')]\n",
" else:\n",
" commandMatchMoreFiles += [f\"{prop2}: (node1)-[]->()\"]\n",
"# print(commandMatchMoreFiles)\n",
" if len(commandWhere) == 0:\n",
" command = commandInit + commandOtherFiles + commandMatch + (\", \".join(commandMatchMoreFiles)) + \"'\"\n",
" else:\n",
" command = commandInit + commandOtherFiles + commandMatch + (\", \".join(commandMatchMoreFiles)) + \"'\" + \" --where '\"+(\" and \".join(commandWhere))+\"'\"\n",
" \n",
" if cnt % 100 == 0:\n",
" if fOP:\n",
" fOP.close()\n",
" fCnt += 1\n",
" fOP = open(\"../../propertiesSplitWRemoved2/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n",
" \n",
" if len(excptns) == 0:\n",
" commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplitWRemoved2/checkViolations/exec_logs/timeLog_\" + shellFileSuffix + str(fCnt) + \".txt;\\n\"\n",
" fOP.write(command)\n",
" else:\n",
" commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect_wo_exceptions.tsv\\n\"\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk --debug query -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \"\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk --debug ifnotexists -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk cat -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplitWRemoved2/checkViolations/exec_logs/timeLog_\" + shellFileSuffix + str(fCnt) + \".txt; \\n\"\n",
" fOP.write(command)\n",
" \n",
" \n",
" cnt += 1\n",
"# except:\n",
"# print(\"Something failed for prop:\",prop)\n",
"if fOP:\n",
" fOP.close()"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "searching-individual",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"475"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cnt"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "silver-clarity",
"metadata": {},
"outputs": [],
"source": [
"# import os\n",
"# for i in range(1,26):\n",
"# os.system(\"screen -dm sh ../../propertiesSplitWRemoved2/checkViolations/codepConst_MN_Validator_new2_\"+str(i)+\".sh\")"
]
},
{
"cell_type": "markdown",
"id": "prescription-access",
"metadata": {},
"source": [
"#### Version 3 - Mandatory"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "married-porter",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "be961871162c4726aefe3f576c1abcbe",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/3147 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"File: ../../propertiesSplitWRemoved2/claims.P1627.tsv does not exist\n"
]
}
],
"source": [
"from tqdm.notebook import tqdm\n",
"import os.path\n",
"import os\n",
"\n",
"cnt = 0\n",
"fCnt = 0\n",
"\n",
"folderName = 'codependencyConstraint_Final'\n",
"subFolderName = \"Mand\"\n",
"shellFileSuffix = 'codepConst_M_Validator_new2_'\n",
"graph_cache_file_prefix = \"codep_new3_03_\"\n",
"\n",
"for prop in tqdm(dfItemRequires.index.unique()):\n",
"# try:\n",
" mandatory = []\n",
" suggestion = []\n",
" normal = []\n",
" prop = str(prop)\n",
" \n",
" for _, constraint in dfItemRequires.loc[[prop]].iterrows():\n",
" if type(constraint['P2316']) == list:\n",
" if constraint['P2316'][0] == 'Q21502408':\n",
" mandatory.append(constraint)\n",
" elif constraint['P2316'][0] == 'Q62026391':\n",
" suggestion.append(constraint)\n",
" else:\n",
" normal.append(constraint)\n",
" \n",
" if not(os.path.isfile(\"../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv\")):\n",
" continue\n",
" \n",
" commandInit = \"{ time ( kgtk --debug query -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \"\n",
" commandOtherFiles = \"\"\n",
" commandMatch = \"--match '\"\n",
" commandMatchMoreFiles = [f\"{prop}: (node1)-[nodeProp]->(node2)\"]\n",
" commandWhere = \" --where '\"\n",
" commandWhere = []\n",
" \n",
" # Version 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n",
" constSet = mandatory\n",
" \n",
" if len(constSet) == 0:\n",
" continue\n",
" excptns = set()\n",
" for (rowNo, constraint) in enumerate(constSet):\n",
" prop2 = constraint['P2306']\n",
" \n",
" if type(prop2) != list:\n",
" continue\n",
" prop2 = prop2[0]\n",
" \n",
" if not(os.path.isfile(\"../../propertiesSplitWRemoved2/claims.\"+ prop2 +\".tsv\")):\n",
" print(f\"File: ../../propertiesSplitWRemoved2/claims.{prop2}.tsv does not exist\")\n",
" continue\n",
" \n",
" commandOtherFiles += \"../../propertiesSplitWRemoved2/claims.\"+ prop2 +\".tsv \"\n",
" if type(constraint['P2303']) == list: # Exceptions present\n",
" if len(excptns) == 0:\n",
" excptns = set(constraint['P2303'])\n",
" else:\n",
" excptns = excptns.intersection(set(constraint['P2303']))\n",
" if type(constraint['P2305']) == list:\n",
" commandMatchMoreFiles += [f\"{prop2}: (node1)-[]->(node2_{prop2})\"]\n",
" commandWhere += [\"node2_\" + prop2 + \" in \" + str(list(constraint['P2305'])).replace(\"'\",'\"')]\n",
" else:\n",
" commandMatchMoreFiles += [f\"{prop2}: (node1)-[]->()\"]\n",
"# print(commandMatchMoreFiles)\n",
" if len(commandWhere) == 0:\n",
" command = commandInit + commandOtherFiles + commandMatch + (\", \".join(commandMatchMoreFiles)) + \"'\"\n",
" else:\n",
" command = commandInit + commandOtherFiles + commandMatch + (\", \".join(commandMatchMoreFiles)) + \"'\" + \" --where '\"+(\" and \".join(commandWhere))+\"'\"\n",
" \n",
" if cnt % 100 == 0:\n",
" if fOP:\n",
" fOP.close()\n",
" fCnt += 1\n",
" fOP = open(\"../../propertiesSplitWRemoved2/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n",
" \n",
" if len(excptns) == 0:\n",
" commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplitWRemoved2/checkViolations/exec_logs/timeLog_\" + shellFileSuffix + str(fCnt) + \".txt;\\n\"\n",
" fOP.write(command)\n",
" else:\n",
" commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect_wo_exceptions.tsv\\n\"\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk --debug query -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \"\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk --debug ifnotexists -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk cat -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplitWRemoved2/checkViolations/exec_logs/timeLog_\" + shellFileSuffix + str(fCnt) + \".txt; \\n\"\n",
" fOP.write(command)\n",
" \n",
" \n",
" cnt += 1\n",
"# except:\n",
"# print(\"Something failed for prop:\",prop)\n",
"if fOP:\n",
" fOP.close()"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "according-blackberry",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"79"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cnt"
]
},
{
"cell_type": "code",
"execution_count": 45,
"id": "extraordinary-drawing",
"metadata": {},
"outputs": [],
"source": [
"# import os\n",
"# for i in range(1,12):\n",
"# os.system(\"screen -dm sh ../../propertiesSplitWRemoved2/checkViolations/codepConst_M_Validator_new2_\"+str(i)+\".sh\")"
]
},
{
"cell_type": "markdown",
"id": "subsequent-brown",
"metadata": {},
"source": [
"#### Version 4 - Normal"
]
},
{
"cell_type": "code",
"execution_count": 38,
"id": "operational-migration",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "1e24472c9c45421fb77d68bd305ccfa7",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/3147 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"File: ../../propertiesSplitWRemoved2/claims.P345.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P2604.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P1566.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P2355.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P1014.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P2636.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P1771.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P2755.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P8326.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P954.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P498.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P1297.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P8680.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P715.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P2606.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P8303.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P1874.tsv does not exist\n"
]
}
],
"source": [
"from tqdm.notebook import tqdm\n",
"import os.path\n",
"import os\n",
"\n",
"cnt = 0\n",
"fCnt = 0\n",
"\n",
"folderName = 'codependencyConstraint_Final'\n",
"subFolderName = \"Normal\"\n",
"shellFileSuffix = 'codepConst_N_Validator_new2_'\n",
"graph_cache_file_prefix = \"codep_new3_04_\"\n",
"\n",
"for prop in tqdm(dfItemRequires.index.unique()):\n",
"# try:\n",
" mandatory = []\n",
" suggestion = []\n",
" normal = []\n",
" prop = str(prop)\n",
" \n",
" for _, constraint in dfItemRequires.loc[[prop]].iterrows():\n",
" if type(constraint['P2316']) == list:\n",
" if constraint['P2316'][0] == 'Q21502408':\n",
" mandatory.append(constraint)\n",
" elif constraint['P2316'][0] == 'Q62026391':\n",
" suggestion.append(constraint)\n",
" else:\n",
" normal.append(constraint)\n",
" \n",
" if not(os.path.isfile(\"../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv\")):\n",
" continue\n",
" \n",
" commandInit = \"{ time ( kgtk --debug query -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \"\n",
" commandOtherFiles = \"\"\n",
" commandMatch = \"--match '\"\n",
" commandMatchMoreFiles = [f\"{prop}: (node1)-[nodeProp]->(node2)\"]\n",
" commandWhere = \" --where '\"\n",
" commandWhere = []\n",
" \n",
" # Version 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n",
" constSet = normal\n",
" \n",
" if len(constSet) == 0:\n",
" continue\n",
" excptns = set()\n",
" for (rowNo, constraint) in enumerate(constSet):\n",
" prop2 = constraint['P2306']\n",
" \n",
" if type(prop2) != list:\n",
" continue\n",
" prop2 = prop2[0]\n",
" \n",
" if not(os.path.isfile(\"../../propertiesSplitWRemoved2/claims.\"+ prop2 +\".tsv\")):\n",
" print(f\"File: ../../propertiesSplitWRemoved2/claims.{prop2}.tsv does not exist\")\n",
" continue\n",
" \n",
" commandOtherFiles += \"../../propertiesSplitWRemoved2/claims.\"+ prop2 +\".tsv \"\n",
" if type(constraint['P2303']) == list: # Exceptions present\n",
" if len(excptns) == 0:\n",
" excptns = set(constraint['P2303'])\n",
" else:\n",
" excptns = excptns.intersection(set(constraint['P2303']))\n",
" if type(constraint['P2305']) == list:\n",
" commandMatchMoreFiles += [f\"{prop2}: (node1)-[]->(node2_{prop2})\"]\n",
" commandWhere += [\"node2_\" + prop2 + \" in \" + str(list(constraint['P2305'])).replace(\"'\",'\"')]\n",
" else:\n",
" commandMatchMoreFiles += [f\"{prop2}: (node1)-[]->()\"]\n",
"# print(commandMatchMoreFiles)\n",
" if len(commandWhere) == 0:\n",
" command = commandInit + commandOtherFiles + commandMatch + (\", \".join(commandMatchMoreFiles)) + \"'\"\n",
" else:\n",
" command = commandInit + commandOtherFiles + commandMatch + (\", \".join(commandMatchMoreFiles)) + \"'\" + \" --where '\"+(\" and \".join(commandWhere))+\"'\"\n",
" \n",
" if cnt % 100 == 0:\n",
" if fOP:\n",
" fOP.close()\n",
" fCnt += 1\n",
" fOP = open(\"../../propertiesSplitWRemoved2/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n",
" \n",
" if len(excptns) == 0:\n",
" commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplitWRemoved2/checkViolations/exec_logs/timeLog_\" + shellFileSuffix + str(fCnt) + \".txt;\\n\"\n",
" fOP.write(command)\n",
" else:\n",
" commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect_wo_exceptions.tsv\\n\"\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk --debug query -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \"\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk --debug ifnotexists -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk cat -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplitWRemoved2/checkViolations/exec_logs/timeLog_\" + shellFileSuffix + str(fCnt) + \".txt; \\n\"\n",
" fOP.write(command)\n",
" \n",
" \n",
" cnt += 1\n",
"# except:\n",
"# print(\"Something failed for prop:\",prop)\n",
"if fOP:\n",
" fOP.close()"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "harmful-binary",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"424"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cnt"
]
},
{
"cell_type": "code",
"execution_count": 46,
"id": "advance-married",
"metadata": {},
"outputs": [],
"source": [
"# import os\n",
"# for i in range(1,21):\n",
"# os.system(\"screen -dm sh ../../propertiesSplitWRemoved2/checkViolations/codepConst_N_Validator_new2_\"+str(i)+\".sh\")"
]
},
{
"cell_type": "markdown",
"id": "ranging-journal",
"metadata": {},
"source": [
"#### Version 5 - Suggestion"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "missing-jordan",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "21d2dfa4582b40d09106a8adf878cdde",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/3147 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"File: ../../propertiesSplitWRemoved2/claims.P1566.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P3350.tsv does not exist\n",
"File: ../../propertiesSplitWRemoved2/claims.P5128.tsv does not exist\n"
]
}
],
"source": [
"from tqdm.notebook import tqdm\n",
"import os.path\n",
"import os\n",
"\n",
"cnt = 0\n",
"fCnt = 0\n",
"\n",
"folderName = 'codependencyConstraint_Final'\n",
"subFolderName = \"Suggestion\"\n",
"shellFileSuffix = 'codepConst_S_Validator_new_3_'\n",
"graph_cache_file_prefix = \"codep_new4_05_\"\n",
"\n",
"fOP = None\n",
"\n",
"for prop in tqdm(dfItemRequires.index.unique()):\n",
"# try:\n",
" mandatory = []\n",
" suggestion = []\n",
" normal = []\n",
" prop = str(prop)\n",
" \n",
" for _, constraint in dfItemRequires.loc[[prop]].iterrows():\n",
" if type(constraint['P2316']) == list:\n",
" if constraint['P2316'][0] == 'Q21502408':\n",
" mandatory.append(constraint)\n",
" elif constraint['P2316'][0] == 'Q62026391':\n",
" suggestion.append(constraint)\n",
" else:\n",
" normal.append(constraint)\n",
" \n",
" if not(os.path.isfile(\"../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv\")):\n",
" continue\n",
" \n",
" commandInit = \"{ time ( kgtk --debug query -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \"\n",
" commandOtherFiles = \"\"\n",
" commandMatch = \"--match '\"\n",
" commandMatchMoreFiles = [f\"{prop}: (node1)-[nodeProp]->(node2)\"]\n",
" commandWhere = \" --where '\"\n",
" commandWhere = []\n",
" \n",
" # Version 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n",
" constSet = suggestion\n",
" \n",
" if len(constSet) == 0:\n",
" continue\n",
" excptns = set()\n",
" for (rowNo, constraint) in enumerate(constSet):\n",
" prop2 = constraint['P2306']\n",
" \n",
" if type(prop2) != list:\n",
" continue\n",
" prop2 = prop2[0]\n",
" \n",
" if not(os.path.isfile(\"../../propertiesSplitWRemoved2/claims.\"+ prop2 +\".tsv\")):\n",
" print(f\"File: ../../propertiesSplitWRemoved2/claims.{prop2}.tsv does not exist\")\n",
" continue\n",
" \n",
" commandOtherFiles += \"../../propertiesSplitWRemoved2/claims.\"+ prop2 +\".tsv \"\n",
" if type(constraint['P2303']) == list: # Exceptions present\n",
" if len(excptns) == 0:\n",
" excptns = set(constraint['P2303'])\n",
" else:\n",
" excptns = excptns.intersection(set(constraint['P2303']))\n",
" if type(constraint['P2305']) == list:\n",
" commandMatchMoreFiles += [f\"{prop2}: (node1)-[]->(node2_{prop2})\"]\n",
" commandWhere += [\"node2_\" + prop2 + \" in \" + str(list(constraint['P2305'])).replace(\"'\",'\"')]\n",
" else:\n",
" commandMatchMoreFiles += [f\"{prop2}: (node1)-[]->()\"]\n",
"# print(commandMatchMoreFiles)\n",
" if len(commandWhere) == 0:\n",
" command = commandInit + commandOtherFiles + commandMatch + (\", \".join(commandMatchMoreFiles)) + \"'\"\n",
" else:\n",
" command = commandInit + commandOtherFiles + commandMatch + (\", \".join(commandMatchMoreFiles)) + \"'\" + \" --where '\"+(\" and \".join(commandWhere))+\"'\"\n",
" \n",
" if cnt % 100 == 0:\n",
" if fOP:\n",
" fOP.close()\n",
" fCnt += 1\n",
" fOP = open(\"../../propertiesSplitWRemoved2/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n",
" \n",
" if len(excptns) == 0:\n",
" commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplitWRemoved2/checkViolations/exec_logs/timeLog_\" + shellFileSuffix + str(fCnt) + \".txt;\\n\"\n",
" fOP.write(command)\n",
" else:\n",
" commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect_wo_exceptions.tsv\\n\"\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk --debug query -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \"\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk --debug ifnotexists -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk cat -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplitWRemoved2/checkViolations/exec_logs/timeLog_\" + shellFileSuffix + str(fCnt) + \".txt; \\n\"\n",
" fOP.write(command)\n",
" \n",
" \n",
" cnt += 1\n",
"# except:\n",
"# print(\"Something failed for prop:\",prop)\n",
"if fOP:\n",
" fOP.close()"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "soviet-forth",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"97"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cnt"
]
},
{
"cell_type": "code",
"execution_count": 46,
"id": "racial-stationery",
"metadata": {},
"outputs": [],
"source": [
"# import os\n",
"# for i in range(1,5):\n",
"# os.system(\"screen -dm sh ../../propertiesSplitWRemoved2/checkViolations/codepConst_S_Validator_new_3_\"+str(i)+\".sh\")"
]
},
{
"cell_type": "markdown",
"id": "structural-envelope",
"metadata": {},
"source": [
"### Merge all correct/incorrect outputs"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "joined-invention",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "57dcbdd4c8014c9288dbb92b331a05a6",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"0it [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# import os\n",
"# from tqdm.notebook import tqdm\n",
"\n",
"# for folder in tqdm(iter(['Mand_Sugg_Normal', 'Mand_Normal', 'Mand', 'Normal'])):\n",
"# folderPath = \"../../allConstraintsAnalysisWRemoved2/codependencyConstraint/\" + folder + \"/\"\n",
"# correct_files_list = \" \".join([folderPath + f for f in filter(lambda f: \".correct.\" in f, os.listdir(folderPath))])\n",
"# incorrect_files_list = \" \".join([folderPath + f for f in filter(lambda f: \".incorrect.\" in f, os.listdir(folderPath))])\n",
"# # print(files_list)\n",
"# os.system(\"{ kgtk cat -i \"+ correct_files_list + \" -o \"+folderPath+\"claims.all.correctSuperSet.tsv -v True; } 2> \"+folderPath+\"claims.all.correctSuperSet.log\")\n",
"# os.system(\"{ kgtk cat -i \"+ incorrect_files_list + \" -o \"+folderPath+\"claims.all.incorrectSuperSet.tsv -v True; } 2> \"+folderPath+\"claims.all.incorrectSuperSet.log\")"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "stopped-bolivia",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "68395f72036a469fad8908d916303bcd",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"0it [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# import os\n",
"# from tqdm.notebook import tqdm\n",
"\n",
"# for folder in tqdm(iter(['Mand_Sugg_Normal', 'Mand_Normal', 'Mand', 'Normal'])):\n",
"# folderPath = \"../../allConstraintsAnalysisWRemoved2/codependencyConstraint_Final/\" + folder + \"/\"\n",
"# correct_files_list = \" \".join([folderPath + f for f in filter(lambda f: \".correct.\" in f, os.listdir(folderPath))])\n",
"# incorrect_files_list = \" \".join([folderPath + f for f in filter(lambda f: \".incorrect.\" in f, os.listdir(folderPath))])\n",
"# # print(files_list)\n",
"# os.system(\"{ kgtk cat -i \"+ correct_files_list + \" -o \"+folderPath+\"claims.all.correctSuperSet.tsv; } 2> \"+folderPath+\"claims.all.correctSuperSet.log\")\n",
"# os.system(\"{ kgtk cat -i \"+ incorrect_files_list + \" -o \"+folderPath+\"claims.all.incorrectSuperSet.tsv; } 2> \"+folderPath+\"claims.all.incorrectSuperSet.log\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "criminal-central",
"metadata": {},
"outputs": [],
"source": [
"# for folder in tqdm(iter(['Mand_Sugg_Normal', 'Mand_Normal', 'Mand', 'Normal'])):\n",
"# folderPath = \"../../allConstraintsAnalysisWRemoved2/codependencyConstraint/\" + folder + \"/\"\n",
"# folderPathNew = \"../../allConstraintsAnalysisWRemoved2/codependencyConstraint_Final/\" + folder + \"/\"\n",
"# os.system(f\"screen -dm kgtk ifnotexists -i {folderPathNew}claims.all.correctSuperSet.tsv --filter-on {folderPath}claims.all.correctSuperSet.tsv -o {folderPathNew}claims.all.correctSuperSet.diff.tsv\")\n",
"# os.system(f\"screen -dm kgtk ifnotexists -i {folderPathNew}claims.all.incorrectSuperSet.tsv --filter-on {folderPath}claims.all.incorrectSuperSet.tsv -o {folderPathNew}claims.all.incorrectSuperSet.diff.tsv\")\n",
" "
]
},
{
"cell_type": "markdown",
"id": "homeless-pleasure",
"metadata": {},
"source": [
"### Analyze Violations"
]
},
{
"cell_type": "code",
"execution_count": 71,
"id": "welcome-dependence",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "d00113c7ab5a4ed7a7b582d4991877b2",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"0it [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "4a8045f2c85240ba92343d7ff646f249",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/1206 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "5e70f6c343434674ac67a4b155c0d8f4",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/1067 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "39add98591234a2a9e67b47a0f93d0a5",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/158 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "d8aadfe718a64f89be5df57c017dd514",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/965 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "2aeaa33d276b492a987c2abffea9dd85",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/215 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import pandas as pd\n",
"import os\n",
"from tqdm.notebook import tqdm\n",
"\n",
"codepConstViolations = {}\n",
"\n",
"def countLines(fname):\n",
" cnt = -1\n",
" with open(fname, 'r') as f:\n",
" for line in f:\n",
" cnt += 1\n",
" return cnt\n",
"\n",
"codepConstViolations = {}\n",
"codepConstPropList = set()\n",
"\n",
"# codepConstViolationsSummary = {}\n",
"\n",
"for folder in tqdm(iter(['Mand_Sugg_Normal', 'Mand_Normal', 'Mand', 'Normal','Suggestion'])):\n",
" filePath = \"../../allConstraintsAnalysisWRemoved2/codependencyConstraint_Final/\"+folder+\"/\"\n",
" for filename in tqdm(os.listdir(filePath)):\n",
" prop = filename.split(\".\")[1]\n",
" correctness = filename.split(\".\")[2]\n",
" if correctness not in ['correct','incorrect']:\n",
" continue\n",
" codepConstPropList.add(prop)\n",
" count1 = countLines(filePath+filename)\n",
" if folder not in codepConstViolations:\n",
" codepConstViolations[folder] = {}\n",
" if prop not in codepConstViolations[folder]:\n",
" codepConstViolations[folder][prop] = {'correct': 0, 'incorrect': 0, 'paths': []}\n",
" codepConstViolations[folder][prop][correctness] = count1\n",
" codepConstViolations[folder][prop]['paths'].append(filePath+filename)\n",
" \n",
"# if folder not in codepConstViolationsSummary:\n",
"# codepConstViolationsSummary[folder] = {'correct': 0, 'incorrect': 0}\n",
"# codepConstViolationsSummary[folder][correctness] += count1"
]
},
{
"cell_type": "code",
"execution_count": 72,
"id": "heated-astrology",
"metadata": {},
"outputs": [],
"source": [
"codepConstViolationsSummary = {}\n",
"for folder in codepConstViolations.keys():\n",
" for prop in codepConstViolations[folder].keys():\n",
" if folder not in codepConstViolationsSummary:\n",
" codepConstViolationsSummary[folder] = {'correct': 0, 'incorrect': 0, 'propCount': 0}\n",
" codepConstViolationsSummary[folder]['correct'] += codepConstViolations[folder][prop]['correct']\n",
" codepConstViolationsSummary[folder]['incorrect'] += codepConstViolations[folder][prop]['incorrect']\n",
" codepConstViolationsSummary[folder]['propCount'] += 1"
]
},
{
"cell_type": "code",
"execution_count": 73,
"id": "grateful-catalog",
"metadata": {},
"outputs": [],
"source": [
"for elem in codepConstViolationsSummary.keys():\n",
" codepConstViolationsSummary[elem]['total'] = codepConstViolationsSummary[elem]['correct'] + codepConstViolationsSummary[elem]['incorrect']\n",
" codepConstViolationsSummary[elem]['percIncorrect'] = codepConstViolationsSummary[elem]['incorrect'] / codepConstViolationsSummary[elem]['total'] * 100"
]
},
{
"cell_type": "code",
"execution_count": 74,
"id": "physical-soviet",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'Mand_Sugg_Normal': {'correct': 308616510,\n",
" 'incorrect': 4788159,\n",
" 'propCount': 534,\n",
" 'total': 313404669,\n",
" 'percIncorrect': 1.5277880241152375},\n",
" 'Mand_Normal': {'correct': 278310708,\n",
" 'incorrect': 2425281,\n",
" 'propCount': 475,\n",
" 'total': 280735989,\n",
" 'percIncorrect': 0.86390099418283},\n",
" 'Mand': {'correct': 5257741,\n",
" 'incorrect': 5365,\n",
" 'propCount': 79,\n",
" 'total': 5263106,\n",
" 'percIncorrect': 0.10193600508901018},\n",
" 'Normal': {'correct': 277367943,\n",
" 'incorrect': 2420131,\n",
" 'propCount': 424,\n",
" 'total': 279788074,\n",
" 'percIncorrect': 0.8649871902688746},\n",
" 'Suggestion': {'correct': 31544215,\n",
" 'incorrect': 2397441,\n",
" 'propCount': 97,\n",
" 'total': 33941656,\n",
" 'percIncorrect': 7.063417883912323}}"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"codepConstViolationsSummary"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "permanent-triumph",
"metadata": {},
"outputs": [],
"source": [
"mandatoryPropCount = 0\n",
"suggestionPropCount = 0\n",
"normalPropCount = 0\n",
"for prop in tqdm(dfItemRequires.index.unique()):\n",
" if not(os.path.isfile(\"../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv\")):\n",
" continue\n",
" prop = str(prop)\n",
" hasMandatory = False\n",
" hasSuggestion = False\n",
" hasNormal = False\n",
"\n",
" for _, constraint in dfItemRequires.loc[[prop]].iterrows():\n",
" prop2 = constraint['P2306']\n",
" \n",
" if type(prop2) != list:\n",
" continue\n",
" prop2 = prop2[0]\n",
"\n",
" if not(os.path.isfile(\"../../propertiesSplitWRemoved2/claims.\"+ prop2 +\".tsv\")):\n",
" print(f\"File: ../../propertiesSplitWRemoved2/claims.{prop2}.tsv does not exist\")\n",
" continue\n",
" \n",
" if type(constraint['P2316']) == list:\n",
" if constraint['P2316'][0] == 'Q21502408':\n",
" hasMandatory = True\n",
" elif constraint['P2316'][0] == 'Q62026391':\n",
" hasSuggestion = True\n",
" else:\n",
" hasNormal = True\n",
" if hasMandatory:\n",
" mandatoryPropCount += 1\n",
" if hasSuggestion:\n",
" suggestionPropCount += 1\n",
" if hasNormal:\n",
" normalPropCount += 1"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "boring-tooth",
"metadata": {},
"outputs": [],
"source": [
"print(f\"No. of props having at least 1 mandatory constraint: {mandatoryPropCount}\")\n",
"print(f\"No. of props having at least 1 suggestion constraint: {suggestionPropCount}\")\n",
"print(f\"No. of props having at least 1 normal constraint: {normalPropCount}\")"
]
},
{
"cell_type": "markdown",
"id": "loving-double",
"metadata": {},
"source": [
"#### Version 1 - Mand Sugg Normal"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "beautiful-xerox",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"codepConstDF1 = pd.DataFrame(codepConstViolations['Mand_Sugg_Normal']).T"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "genetic-venezuela",
"metadata": {},
"outputs": [],
"source": [
"codepConstDF1"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "powered-residence",
"metadata": {},
"outputs": [],
"source": [
"codepConstDF1['violation_ratio'] = codepConstDF1.apply(lambda p: p.incorrect / (p.correct + p.incorrect), axis=1)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "chinese-pressing",
"metadata": {},
"outputs": [],
"source": [
"codepConstDF1.sort_values(by=['violation_ratio'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "armed-constitution",
"metadata": {},
"outputs": [],
"source": [
"list(codepConstDF1.loc['P2302']['paths'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "continued-desire",
"metadata": {},
"outputs": [],
"source": [
"!head ../../allConstraintsAnalysisWRemoved2/codependencyConstraint_Final/Mand_Sugg_Normal/claims.P2302.incorrect.tsv"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "demonstrated-debut",
"metadata": {
"scrolled": false
},
"outputs": [],
"source": [
"codepConstDF1.sort_values(by=['incorrect'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "developed-zimbabwe",
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"codepConstDF1['violation_ratio'].describe()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "unknown-johnston",
"metadata": {},
"outputs": [],
"source": [
"codepConstDF1['violation_ratio'].plot.hist(bins=100).set_title(\"Co-Dependency Constraint - Version 1 - Violation Ratios\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "exceptional-dakota",
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"codepConstDF1[codepConstDF1['violation_ratio'] <= 0.5].violation_ratio.plot.hist(bins=100).set_title(\"Co-Dependency Constraint - Version 1 - Violation Ratios <= 0.5\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "interior-joseph",
"metadata": {},
"outputs": [],
"source": [
"print(f\"No. of properties whose violation ratio is greater than mean: {sum(codepConstDF1['violation_ratio'] >= 3.539484)}/{len(codepConstDF1)}\")"
]
},
{
"cell_type": "markdown",
"id": "greater-genetics",
"metadata": {},
"source": [
"#### Version 2 - Mand Normal"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "constant-chance",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"codepConstDF2 = pd.DataFrame(codepConstViolations['Mand_Normal']).T"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "included-adjustment",
"metadata": {},
"outputs": [],
"source": [
"codepConstDF2"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "fundamental-knowing",
"metadata": {},
"outputs": [],
"source": [
"codepConstDF2['violation_ratio'] = codepConstDF2.apply(lambda p: p.incorrect / (p.correct + p.incorrect), axis=1)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "harmful-discipline",
"metadata": {},
"outputs": [],
"source": [
"codepConstDF2.sort_values(by=['violation_ratio'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "unlikely-chamber",
"metadata": {
"scrolled": false
},
"outputs": [],
"source": [
"codepConstDF2.sort_values(by=['incorrect'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "violent-match",
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"codepConstDF2['violation_ratio'].describe()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "educational-thickness",
"metadata": {},
"outputs": [],
"source": [
"codepConstDF2['violation_ratio'].plot.hist(bins=100).set_title(\"Co-Dependency Constraint - Version 2 - Violation Ratios\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "latin-mitchell",
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"codepConstDF2[codepConstDF2['violation_ratio'] <= 0.5].violation_ratio.plot.hist(bins=100).set_title(\"Co-Dependency Constraint - Version 2 - Violation Ratios <= 0.5\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "asian-forwarding",
"metadata": {},
"outputs": [],
"source": [
"print(f\"No. of properties whose violation ratio is greater than mean: {sum(codepConstDF2['violation_ratio'] >= 2.290915)}/{len(codepConstDF2)}\")"
]
},
{
"cell_type": "markdown",
"id": "destroyed-flash",
"metadata": {},
"source": [
"#### Version 3 - Mand"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "consecutive-plenty",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"codepConstDF3 = pd.DataFrame(codepConstViolations['Mand']).T"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "digital-mileage",
"metadata": {},
"outputs": [],
"source": [
"codepConstDF3"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "formed-battle",
"metadata": {},
"outputs": [],
"source": [
"codepConstDF3['violation_ratio'] = codepConstDF3.apply(lambda p: p.incorrect / p.correct if p.correct != 0 else p.incorrect/100, axis=1)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "numerous-construction",
"metadata": {},
"outputs": [],
"source": [
"codepConstDF3.sort_values(by=['violation_ratio'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "identified-marble",
"metadata": {},
"outputs": [],
"source": [
"codepConstDF3.loc['P1713']"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "established-mounting",
"metadata": {},
"outputs": [],
"source": [
"!head ../../allConstraintsAnalysisWRemoved2/codependencyConstraint_Final/Mand/claims.P1713.incorrect.tsv"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "naval-functionality",
"metadata": {},
"outputs": [],
"source": [
"!cat ../../allConstraintsAnalysisWRemoved2/codependencyConstraint/Mand/claims.P1713.incorrect.tsv"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "imposed-bibliography",
"metadata": {
"scrolled": false
},
"outputs": [],
"source": [
"codepConstDF3.sort_values(by=['incorrect'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "emotional-crown",
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"codepConstDF3['violation_ratio'].describe()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "certain-freeze",
"metadata": {},
"outputs": [],
"source": [
"codepConstDF3['violation_ratio'].plot.hist(bins=100).set_title(\"Co-Dependency Constraint - Version 3 - Violation Ratios\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "cooperative-ownership",
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"codepConstDF3[codepConstDF3['violation_ratio'] <= 0.0005].violation_ratio.plot.hist(bins=100).set_title(\"Co-Dependency Constraint - Version 3 - Violation Ratios <= 0.0005\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "studied-inclusion",
"metadata": {},
"outputs": [],
"source": [
"print(f\"No. of properties whose violation ratio is greater than mean: {sum(codepConstDF3['violation_ratio'] >= 0.922928)}/{len(codepConstDF3)}\")"
]
},
{
"cell_type": "markdown",
"id": "protective-brazil",
"metadata": {},
"source": [
"#### Version 4 - Normal"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "laughing-pressing",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"codepConstDF4 = pd.DataFrame(codepConstViolations['Normal']).T"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "loving-swift",
"metadata": {},
"outputs": [],
"source": [
"codepConstDF4"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "north-christian",
"metadata": {},
"outputs": [],
"source": [
"codepConstDF4['violation_ratio'] = codepConstDF4.apply(lambda p: p.incorrect / p.correct if p.correct != 0 else p.incorrect/100, axis=1)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "closing-causing",
"metadata": {},
"outputs": [],
"source": [
"codepConstDF4.sort_values(by=['violation_ratio'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "weighted-input",
"metadata": {},
"outputs": [],
"source": [
"# list(codepConstDF4.sort_values(by=['violation_ratio'],ascending=False).head(5).paths)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "brief-effect",
"metadata": {
"scrolled": false
},
"outputs": [],
"source": [
"codepConstDF4.sort_values(by=['incorrect'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "wireless-passenger",
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"codepConstDF4['violation_ratio'].describe()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "civilian-arnold",
"metadata": {},
"outputs": [],
"source": [
"codepConstDF4['violation_ratio'].plot.hist(bins=100).set_title(\"Co-Dependency Constraint - Version 4 - Violation Ratios\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "threaded-cooler",
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"codepConstDF4[codepConstDF4['violation_ratio'] <= 0.5].violation_ratio.plot.hist(bins=100).set_title(\"Co-Dependency Constraint - Version 4 - Violation Ratios <= 0.5\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "olympic-charlotte",
"metadata": {},
"outputs": [],
"source": [
"print(f\"No. of properties whose violation ratio is greater than mean: {sum(codepConstDF4['violation_ratio'] >= 2.414703)}/{len(codepConstDF4)}\")"
]
},
{
"cell_type": "markdown",
"id": "published-affiliate",
"metadata": {},
"source": [
"### Find out time required"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "aggregate-conservative",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import os\n",
"from tqdm.notebook import tqdm\n",
"\n",
"codepConstViolations = {}\n",
"\n",
"codepConstViolations = {}\n",
"codepConstPropList = set()\n",
"\n",
"def extractTimes(filename):\n",
" times = []\n",
" with open(filename) as f:\n",
" for line in f:\n",
" if \"real\" in line:\n",
" line = line.strip()\n",
" time1 = line.split(\"\\t\")[1]\n",
" mins, sec = time1.split(\"m\")\n",
" mins = int(mins)\n",
" sec = float(sec[:-1])\n",
" times.append(60 * mins + sec)\n",
" return times\n",
"\n",
"# codepConstViolationsSummary = {}\n",
"times = []\n",
"timesVersion = {\"MSN\": [], \"MN\": [], \"M\": [], \"N\": [], \"S\": []}\n",
"filePath = '/data/wd-correctness/propertiesSplitWRemoved2/checkViolations/exec_logs/'\n",
"for filename in tqdm(os.listdir(filePath)):\n",
" if filename.startswith(\"timeLog_codepConst_\"):\n",
" ver = filename.split('_')[2]\n",
" tempTimes = extractTimes(filePath + filename)\n",
" times += tempTimes\n",
" timesVersion[ver] += tempTimes\n",
"print(pd.Series(times).describe())"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "hearing-treasury",
"metadata": {},
"outputs": [],
"source": [
"print(pd.Series(timesVersion['MSN']).describe())"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "animal-vocabulary",
"metadata": {},
"outputs": [],
"source": [
"print(pd.Series(timesVersion['MN']).describe())"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "gentle-accessory",
"metadata": {},
"outputs": [],
"source": [
"print(pd.Series(timesVersion['M']).describe())"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "fresh-namibia",
"metadata": {},
"outputs": [],
"source": [
"print(pd.Series(timesVersion['N']).describe())"
]
},
{
"cell_type": "markdown",
"id": "industrial-parcel",
"metadata": {},
"source": [
"## Symmetric Constraint (Q21510862)\n",
"\n",
"This constraint says, if node1 has a property with this constraint, then both `(node1)-[prop]->(node2)` and `(node2)-[prop]->(node1)` must be present with few exceptions"
]
},
{
"cell_type": "markdown",
"id": "silent-fundamentals",
"metadata": {},
"source": [
"### Constraints File"
]
},
{
"cell_type": "code",
"execution_count": 48,
"id": "known-wednesday",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2021-04-13 18:58:46 query]: SQL Translation:\r\n",
"---------------------------------------------\r\n",
" SELECT *\r\n",
" FROM graph_1 AS graph_1_c1\r\n",
" WHERE graph_1_c1.\"label\"=?\r\n",
" AND graph_1_c1.\"node2\"=?\r\n",
" PARAS: ['P2302', 'Q21510862']\r\n",
"---------------------------------------------\r\n"
]
}
],
"source": [
"!kgtk --debug query -i ../../gdrive-kgtk-dump-2020-12-07/claims.properties.tsv.gz \\\n",
" ../../gdrive-kgtk-dump-2020-12-07/qualifiers.properties.tsv.gz \\\n",
" --match \"p: (nodeProp1)-[nodePropEdge:P2302]->(:Q21510862)\" \\\n",
" -o ../../constraintsOP/symmetricConstraint/claims.constraints_list.tsv \\\n",
" --graph-cache ~/sqlite3_caches/temp1345.valuetype.sqlite3.db"
]
},
{
"cell_type": "code",
"execution_count": 49,
"id": "legal-diamond",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"qualiDF = pd.read_csv(\"../../gdrive-kgtk-dump-2020-12-07/qualifiers.properties.tsv.gz\",sep='\\t')\n",
"constDF = pd.read_csv(\"../../constraintsOP/symmetricConstraint/claims.constraints_list.tsv\",sep='\\t')"
]
},
{
"cell_type": "code",
"execution_count": 50,
"id": "exceptional-morris",
"metadata": {},
"outputs": [],
"source": [
"constDF2 = constDF.set_index('id').join(qualiDF.set_index('node1'),rsuffix='_qualifier').drop(columns=['id', 'node2;wikidatatype_qualifier', 'rank', 'node2', 'label', 'node2;wikidatatype']).rename(columns={'label_qualifier':'label', 'node2_qualifier': 'node2'})\n",
"constDF2 = constDF2.reset_index()\n",
"constDF2 = constDF2.rename(columns={'index':'id'})\n",
"constDF2['label'] = constDF2.label.fillna(\"P2316\")\n",
"constDF2['node2'] = constDF2.node2.fillna(\"Normal\")"
]
},
{
"cell_type": "code",
"execution_count": 51,
"id": "burning-involvement",
"metadata": {},
"outputs": [],
"source": [
"constDF2.to_csv(\"../../constraintsOP/symmetricConstraint/claims.constraints_all.tsv\",sep=\"\\t\",index=False)"
]
},
{
"cell_type": "code",
"execution_count": 52,
"id": "naval-identification",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import math\n",
"dfItemRequires = pd.read_csv('../../constraintsOP/symmetricConstraint/claims.constraints_all.tsv',sep='\\t')"
]
},
{
"cell_type": "code",
"execution_count": 53,
"id": "considered-madison",
"metadata": {},
"outputs": [],
"source": [
"dfItemRequires = dfItemRequires.groupby(['id','node1','label']).node2.apply(lambda p: p.tolist()).reset_index()"
]
},
{
"cell_type": "code",
"execution_count": 54,
"id": "alone-cattle",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['P2316', 'P2303'], dtype=object)"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires['label'].unique()"
]
},
{
"cell_type": "code",
"execution_count": 55,
"id": "mighty-ordinary",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"P2316 42\n",
"P2303 3\n",
"Name: label, dtype: int64"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires['label'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 56,
"id": "sensitive-alliance",
"metadata": {},
"outputs": [],
"source": [
"#Reference: https://stackoverflow.com/a/17298454\n",
"# dfItemRequires.pivot_table('node2', ['node1', 'id'], 'label')\n",
"dfItemRequires = dfItemRequires.pivot(index=['node1','id'], columns='label', values='node2')"
]
},
{
"cell_type": "code",
"execution_count": 57,
"id": "tender-valley",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" label \n",
" P2303 \n",
" P2316 \n",
" \n",
" \n",
" node1 \n",
" id \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" P1322 \n",
" P1322-P2302-Q21510862-85dea891-0 \n",
" NaN \n",
" [Normal] \n",
" \n",
" \n",
" P1327 \n",
" P1327-P2302-Q21510862-a3c3a094-0 \n",
" NaN \n",
" [Normal] \n",
" \n",
" \n",
" P1382 \n",
" P1382-P2302-Q21510862-f6bcfecf-0 \n",
" NaN \n",
" [Normal] \n",
" \n",
" \n",
" P1560 \n",
" P1560-P2302-Q21510862-fabecaeb-0 \n",
" NaN \n",
" [Q21502408] \n",
" \n",
" \n",
" P1639 \n",
" P1639-P2302-Q21510862-384edcd4-0 \n",
" NaN \n",
" [Q21502408] \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
"label P2303 P2316\n",
"node1 id \n",
"P1322 P1322-P2302-Q21510862-85dea891-0 NaN [Normal]\n",
"P1327 P1327-P2302-Q21510862-a3c3a094-0 NaN [Normal]\n",
"P1382 P1382-P2302-Q21510862-f6bcfecf-0 NaN [Normal]\n",
"P1560 P1560-P2302-Q21510862-fabecaeb-0 NaN [Q21502408]\n",
"P1639 P1639-P2302-Q21510862-384edcd4-0 NaN [Q21502408]"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires.head()"
]
},
{
"cell_type": "code",
"execution_count": 58,
"id": "cellular-canal",
"metadata": {},
"outputs": [],
"source": [
"dfItemRequires = dfItemRequires.droplevel(1)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"id": "desperate-poster",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" label \n",
" P2303 \n",
" P2316 \n",
" \n",
" \n",
" node1 \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" P1322 \n",
" NaN \n",
" [Normal] \n",
" \n",
" \n",
" P1327 \n",
" NaN \n",
" [Normal] \n",
" \n",
" \n",
" P1382 \n",
" NaN \n",
" [Normal] \n",
" \n",
" \n",
" P1560 \n",
" NaN \n",
" [Q21502408] \n",
" \n",
" \n",
" P1639 \n",
" NaN \n",
" [Q21502408] \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
"label P2303 P2316\n",
"node1 \n",
"P1322 NaN [Normal]\n",
"P1327 NaN [Normal]\n",
"P1382 NaN [Normal]\n",
"P1560 NaN [Q21502408]\n",
"P1639 NaN [Q21502408]"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires.head()"
]
},
{
"cell_type": "markdown",
"id": "primary-netherlands",
"metadata": {},
"source": [
"### Query Generator"
]
},
{
"cell_type": "code",
"execution_count": 60,
"id": "pointed-haven",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "5ff09bb499d044ecaa4605a4ab390068",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"0it [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from tqdm.notebook import tqdm\n",
"import os.path\n",
"import os\n",
"\n",
"cnt = 0\n",
"fCnt = 0\n",
"\n",
"folderName = 'symmetricConstraint'\n",
"shellFileSuffix = 'symmConst_Validator_'\n",
"graph_cache_prefix = 'symm_03'\n",
"\n",
"for row in tqdm(dfItemRequires.iterrows()):\n",
"# try:\n",
" prop = row[0]\n",
" constraint = row[1]\n",
" mandatory = []\n",
" suggestion = []\n",
" normal = []\n",
" prop = str(prop)\n",
" \n",
" if type(constraint['P2316']) == list:\n",
" if constraint['P2316'][0] == 'Q21502408':\n",
" sfname = 'mandatory'\n",
" elif constraint['P2316'][0] == 'Q62026391':\n",
" sfname = 'suggestion'\n",
" elif constraint['P2316'][0] == 'Normal':\n",
" sfname = 'normal'\n",
" else:\n",
" sfname = 'normal'\n",
" \n",
" if not(os.path.isfile(\"../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv\")):\n",
" continue\n",
" \n",
" command = \"{ time ( kgtk --debug query -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
" ../../propertiesSplitWRemoved2/claims.\"+ prop +\".copy2.tsv \\\n",
" --match 'tsv: (node1)-[nodeProp]->(node2), copy2: (node2)-[]->(node1)' \"\n",
" \n",
" os.system(\"cp ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv ../../propertiesSplitWRemoved2/claims.\"+ prop +\".copy2.tsv\")\n",
" \n",
" if cnt % 60 == 0:\n",
" fCnt += 1\n",
" fOP = open(\"../../propertiesSplitWRemoved2/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n",
" command\n",
" if type(constraint['P2303']) != list: # Exceptions not present\n",
" commandRest = \" --return 'nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\"+graph_cache_prefix+\"_\" + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplitWRemoved2/checkViolations/exec_logs/\" + shellFileSuffix + str(fCnt) + \".txt;\\n\"\n",
"# print(command)\n",
" fOP.write(command)\n",
" else:\n",
" excptns = constraint['P2303']\n",
" commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\"+graph_cache_prefix+\"_\" + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect_wo_exceptions.tsv; \"\n",
"# print(command)\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk --debug query -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + sfname + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + sfname + \"/claims.\" + prop + \".correct_exceptions.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\"+graph_cache_prefix+\"_\" + str(fCnt) + \".sqlite3.db; \"\n",
"# print(command)\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk --debug ifnotexists -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + sfname + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + sfname + \"/claims.\" + prop + \".correct_exceptions.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".incorrect.tsv; \"\n",
"# print(command)\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk cat -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct_exceptions.tsv \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplitWRemoved2/checkViolations/exec_logs/\" + shellFileSuffix + str(fCnt) + \".txt;\\n\"\n",
"# print(command)\n",
" fOP.write(command)\n",
" \n",
" \n",
" cnt += 1\n",
"# except:\n",
"# print(\"Something failed for prop:\",prop)"
]
},
{
"cell_type": "code",
"execution_count": 61,
"id": "polar-canada",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"39"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cnt"
]
},
{
"cell_type": "code",
"execution_count": 62,
"id": "virtual-disney",
"metadata": {},
"outputs": [],
"source": [
"# import os\n",
"# for i in range(1,2):\n",
"# os.system(\"screen -dm sh ../../propertiesSplitWRemoved2/checkViolations/symmConst_Validator_\"+str(i)+\".sh\")"
]
},
{
"cell_type": "markdown",
"id": "coral-cheese",
"metadata": {},
"source": [
"### Analyze Violations"
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "governmental-backup",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "e13ba4b56db84a0f997467ec87fdcec4",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"0it [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "c01a49837d8a448ab5a1f234a1214fe5",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/13 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "1090a3c3530e4c09bd85bdf38b2c27b9",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/68 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "b08a44c309e64ea5949e8a7611db2e49",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/6 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import pandas as pd\n",
"import os\n",
"from tqdm.notebook import tqdm\n",
"\n",
"symmConstViolations = {}\n",
"\n",
"def countLines(fname):\n",
" cnt = -1\n",
" with open(fname, 'r') as f:\n",
" for line in f:\n",
" cnt += 1\n",
" return cnt\n",
"\n",
"symmConstViolations = {}\n",
"symmConstPropList = set()\n",
"\n",
"# codepConstViolationsSummary = {}\n",
"\n",
"\n",
"filePath = \"../../allConstraintsAnalysisWRemoved2/symmetricConstraint/\"\n",
"for folder in tqdm(iter(['mandatory','normal','suggestion'])):\n",
" for filename in tqdm(os.listdir(filePath + folder)):\n",
" prop = filename.split(\".\")[1]\n",
" correctness = filename.split(\".\")[2]\n",
" if correctness not in ['correct','incorrect']:\n",
" continue\n",
" symmConstPropList.add(prop)\n",
" count1 = countLines(filePath+folder+'/'+filename)\n",
" if folder not in symmConstViolations:\n",
" symmConstViolations[folder] = {}\n",
" if prop not in symmConstViolations[folder]:\n",
" symmConstViolations[folder][prop] = {'correct': 0, 'incorrect': 0, 'paths': []}\n",
" symmConstViolations[folder][prop][correctness] = count1\n",
" symmConstViolations[folder][prop]['paths'].append(filePath+folder+'/'+filename)"
]
},
{
"cell_type": "code",
"execution_count": 48,
"id": "helpful-offset",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"39"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(symmConstPropList)"
]
},
{
"cell_type": "code",
"execution_count": 49,
"id": "entertaining-rescue",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "e12328d99e0044e6a16ec1c316851ea3",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"0it [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"symmConstViolationsSummary = {}\n",
"for folder in tqdm(iter(['mandatory','normal','suggestion'])):\n",
" symmConstViolationsSummary[folder] = {'correct': 0, 'incorrect': 0}\n",
" for prop in symmConstViolations[folder].keys():\n",
" symmConstViolationsSummary[folder]['correct'] += symmConstViolations[folder][prop]['correct']\n",
" symmConstViolationsSummary[folder]['incorrect'] += symmConstViolations[folder][prop]['incorrect']\n",
" symmConstViolationsSummary[folder]['total'] = symmConstViolationsSummary[folder]['correct'] + symmConstViolationsSummary[folder]['incorrect']\n",
" symmConstViolationsSummary[folder]['percIncorrect'] = symmConstViolationsSummary[folder]['incorrect'] / symmConstViolationsSummary[folder]['total'] * 100\n",
" symmConstViolationsSummary[folder]['propCount'] = len(symmConstViolations[folder].keys())"
]
},
{
"cell_type": "code",
"execution_count": 50,
"id": "copyrighted-marshall",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'mandatory': {'correct': 7768,\n",
" 'incorrect': 41,\n",
" 'total': 7809,\n",
" 'percIncorrect': 0.525035215776668,\n",
" 'propCount': 5},\n",
" 'normal': {'correct': 14155303,\n",
" 'incorrect': 3484987,\n",
" 'total': 17640290,\n",
" 'percIncorrect': 19.755837347345196,\n",
" 'propCount': 31},\n",
" 'suggestion': {'correct': 819403,\n",
" 'incorrect': 33067,\n",
" 'total': 852470,\n",
" 'percIncorrect': 3.8789634825858976,\n",
" 'propCount': 3}}"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"symmConstViolationsSummary"
]
},
{
"cell_type": "code",
"execution_count": 51,
"id": "enhanced-ontario",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"18500569"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"noOfStmts = 0\n",
"for fold in symmConstViolationsSummary.keys():\n",
" noOfStmts += symmConstViolationsSummary[fold]['total']\n",
"noOfStmts"
]
},
{
"cell_type": "code",
"execution_count": 52,
"id": "representative-conjunction",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" violation_ratio \n",
" \n",
" \n",
" \n",
" \n",
" P1639 \n",
" 2105 \n",
" 25 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.011737 \n",
" \n",
" \n",
" P1560 \n",
" 3488 \n",
" 15 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.004282 \n",
" \n",
" \n",
" P3364 \n",
" 1813 \n",
" 1 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.000551 \n",
" \n",
" \n",
" P2152 \n",
" 80 \n",
" 0 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.000000 \n",
" \n",
" \n",
" P6185 \n",
" 282 \n",
" 0 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.000000 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P1639 2105 25 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"P1560 3488 15 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"P3364 1813 1 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"P2152 80 0 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"P6185 282 0 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"\n",
" violation_ratio \n",
"P1639 0.011737 \n",
"P1560 0.004282 \n",
"P3364 0.000551 \n",
"P2152 0.000000 \n",
"P6185 0.000000 "
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"symmConstDF1 = pd.DataFrame(symmConstViolations['mandatory']).T\n",
"symmConstDF1['violation_ratio'] = symmConstDF1.apply(lambda p: p.incorrect / (p.incorrect + p.correct), axis=1)\n",
"symmConstDF1.sort_values(by=['violation_ratio'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": 53,
"id": "gross-extraction",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" violation_ratio \n",
" \n",
" \n",
" \n",
" \n",
" P2789 \n",
" 105201 \n",
" 6590 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.058949 \n",
" \n",
" \n",
" P1889 \n",
" 533338 \n",
" 24740 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.044331 \n",
" \n",
" \n",
" P197 \n",
" 180864 \n",
" 1737 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.009513 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P2789 105201 6590 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"P1889 533338 24740 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"P197 180864 1737 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"\n",
" violation_ratio \n",
"P2789 0.058949 \n",
"P1889 0.044331 \n",
"P197 0.009513 "
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"symmConstDF2 = pd.DataFrame(symmConstViolations['suggestion']).T\n",
"symmConstDF2['violation_ratio'] = symmConstDF2.apply(lambda p: p.incorrect / (p.incorrect + p.correct), axis=1)\n",
"symmConstDF2.sort_values(by=['violation_ratio'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": 54,
"id": "heavy-scout",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" violation_ratio \n",
" \n",
" \n",
" \n",
" \n",
" P5188 \n",
" 0 \n",
" 5 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 1.000000 \n",
" \n",
" \n",
" P5974 \n",
" 0 \n",
" 1 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 1.000000 \n",
" \n",
" \n",
" P1706 \n",
" 12 \n",
" 84 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.875000 \n",
" \n",
" \n",
" P2652 \n",
" 500 \n",
" 836 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.625749 \n",
" \n",
" \n",
" P521 \n",
" 424 \n",
" 146 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.256140 \n",
" \n",
" \n",
" P684 \n",
" 12091769 \n",
" 3437304 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.221346 \n",
" \n",
" \n",
" P3032 \n",
" 1743 \n",
" 316 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.153473 \n",
" \n",
" \n",
" P1382 \n",
" 11075 \n",
" 1657 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.130145 \n",
" \n",
" \n",
" P2293 \n",
" 14736 \n",
" 1969 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.117869 \n",
" \n",
" \n",
" P1327 \n",
" 7954 \n",
" 706 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.081524 \n",
" \n",
" \n",
" P4545 \n",
" 46 \n",
" 4 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.080000 \n",
" \n",
" \n",
" P451 \n",
" 11072 \n",
" 790 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.066599 \n",
" \n",
" \n",
" P530 \n",
" 6730 \n",
" 382 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.053712 \n",
" \n",
" \n",
" P3403 \n",
" 2174 \n",
" 112 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.048994 \n",
" \n",
" \n",
" P460 \n",
" 265706 \n",
" 12622 \n",
" [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
" 0.045349 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P5188 0 5 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"P5974 0 1 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"P1706 12 84 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"P2652 500 836 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"P521 424 146 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"P684 12091769 3437304 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"P3032 1743 316 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"P1382 11075 1657 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"P2293 14736 1969 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"P1327 7954 706 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"P4545 46 4 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"P451 11072 790 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"P530 6730 382 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"P3403 2174 112 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"P460 265706 12622 [../../allConstraintsAnalysisWRemoved2/symmetr... \n",
"\n",
" violation_ratio \n",
"P5188 1.000000 \n",
"P5974 1.000000 \n",
"P1706 0.875000 \n",
"P2652 0.625749 \n",
"P521 0.256140 \n",
"P684 0.221346 \n",
"P3032 0.153473 \n",
"P1382 0.130145 \n",
"P2293 0.117869 \n",
"P1327 0.081524 \n",
"P4545 0.080000 \n",
"P451 0.066599 \n",
"P530 0.053712 \n",
"P3403 0.048994 \n",
"P460 0.045349 "
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"symmConstDF3 = pd.DataFrame(symmConstViolations['normal']).T\n",
"symmConstDF3['violation_ratio'] = symmConstDF3.apply(lambda p: p.incorrect / (p.incorrect + p.correct), axis=1)\n",
"symmConstDF3.sort_values(by=['violation_ratio'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": 55,
"id": "sexual-blowing",
"metadata": {},
"outputs": [],
"source": [
"# !head ../../allConstraintsAnalysisWRemoved2/symmetricConstraint/normal/claims.P3032.incorrect.tsv\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 56,
"id": "legitimate-aspect",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Symmetric Normal Constraint - Violation Ratios')"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"symmConstDF3.sort_values(by=['violation_ratio'],ascending=False)['violation_ratio'].plot.hist(bins=100).set_title(\"Symmetric Normal Constraint - Violation Ratios\")"
]
},
{
"cell_type": "markdown",
"id": "unlikely-sewing",
"metadata": {},
"source": [
"### Find out time required"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "southern-reasoning",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "01675fcd83284c8ab2aa683f43fef458",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/108 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import pandas as pd\n",
"import os\n",
"from tqdm.notebook import tqdm\n",
"\n",
"codepConstViolations = {}\n",
"\n",
"codepConstViolations = {}\n",
"codepConstPropList = set()\n",
"\n",
"def extractTimes(filename):\n",
" times = []\n",
" with open(filename) as f:\n",
" for line in f:\n",
" if \"real\" in line:\n",
" line = line.strip()\n",
" time1 = line.split(\"\\t\")[1]\n",
" mins, sec = time1.split(\"m\")\n",
" mins = int(mins)\n",
" sec = float(sec[:-1])\n",
" times.append(60 * mins + sec)\n",
" return times\n",
"\n",
"# codepConstViolationsSummary = {}\n",
"times = []\n",
"filePath = '/data/wd-correctness/propertiesSplitWRemoved2/checkViolations/exec_logs/'\n",
"for filename in tqdm(os.listdir(filePath)):\n",
" if filename.startswith(\"symmConst_Validator_\"):\n",
" tempTimes = extractTimes(filePath + filename)\n",
" times += tempTimes"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "classical-updating",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"count 38.000000\n",
"mean 15.315868\n",
"std 61.526228\n",
"min 2.069000\n",
"25% 2.617750\n",
"50% 3.003000\n",
"75% 5.889250\n",
"max 383.135000\n",
"dtype: float64\n"
]
}
],
"source": [
"print(pd.Series(times).describe())"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "fundamental-bottle",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Distribution of times (in s) taken for symmetric constraint checks')"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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bhoLV28udYhF19KW7Hc7Wnfn4vtms2pTC9d+4lAG19UAsPcug/n3Dx/IX19/m5uefqPEUZYfd6epre+txZRcZId6feUmPnXTdAbWJrjj80dx7ScO46wjxvM/T87new/PLfkOri2Z4sLbX+C1lZv42acO54AxQwA4Zu9R3DX1aFrakpxx/d95aemGksZZTH+Ys4IpV/yRj143jcVrmkodTrfakynak6mcx//VM2/y6MsrufjE/Th43LCthp09ZTwnHLgrP370FeYs6z+fZTFsaU/hHm5AWYgGlcVkR1u4ejOf+MV0qquM279wFONHNJCoMn70z+/mvPfswS3TFnHJ/bNJlijBuDv//uAc/vzaan5w2kH847satxr+7nFDufeCo6mrSXD2jc8wbcHbJYmzWFrakvzbAy9xwa9eYOzwBhau3syHrvkrv5u9oveJdyB3594ZS5jywyc45sonue/5pb3+CJm7fCPf/908/mnfRj537B7bDDczrvzngxk5cABfvnMm72ypnJPPvWnuw4PCoPOci45cZIdYvKaJT9w4nVTKueMLR7LHqIEdw8yM73xof778vn24Z8ZSvnzXTFrbc/+FWizX/XkBdz67hC8dtxdnT5mQdZw9Gwdx3xePYcywOj5783P8YU557Yhz9drKTZxy7dPcPn0x5793Tx688Fge+fI/sPeug7jwjhf49gMvlcUvz1ff2sSZP/873/r1bPYYNZDRw+r5xr0v8s/XTWPm4nVZp2lqbeeiO19gWH0N/3XGIVR1c2ff4QNrufrjk3hjzTtc/vDc7fk2dirpB4UVmlzqqisvueg6lxJZtr6ZT/ziGVrak9z5haPYe5fB24xjZnz9A+9i0IAEP3zkFZpbk/zsk4dlPTRvS6aYvXQD099Yw0tLNzCkrobRw+oYM7SeMcPqO7rzae3y0IvL+fEfXuWUQ8bwzQ/u2+O4uw2t457zj+ZztzzHl25/gR+c9m7OnjKe+PC4vLg7C1a/Q22iivEj6guaR77Lu+PZxVz+8FwG11Vz6+emdByhjR/RwD3nH81PHnuN6/+8gOcXrePaTxzKPrtu+3ltb+9saeenT7zOTU+/wZC6an78sYM5/fBxADwwcxlX/uEVPvqzaXzssHFcfOK+7DKkrmPaf3/wZd54+x1u//yRjBzU87UaR+81ki8dtxf/+9QC3vuuRj508Ojt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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import seaborn as sns\n",
"sns.lineplot(data=pd.Series(times)).set_title(\"Distribution of times (in s) taken for symmetric constraint checks\")"
]
},
{
"cell_type": "markdown",
"id": "informed-animal",
"metadata": {},
"source": [
"## Inverse Constraint (Q21510855)\n",
"\n",
"This constraint says, if node1 has a property with this constraint, then both `(node1)-[prop]->(node2)` and `(node2)-[prop]->(node1)` must be present with few exceptions"
]
},
{
"cell_type": "markdown",
"id": "dramatic-manchester",
"metadata": {},
"source": [
"### Constraints File"
]
},
{
"cell_type": "code",
"execution_count": 63,
"id": "leading-server",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2021-04-13 19:00:13 query]: SQL Translation:\r\n",
"---------------------------------------------\r\n",
" SELECT *\r\n",
" FROM graph_1 AS graph_1_c1\r\n",
" WHERE graph_1_c1.\"label\"=?\r\n",
" AND graph_1_c1.\"node2\"=?\r\n",
" PARAS: ['P2302', 'Q21510855']\r\n",
"---------------------------------------------\r\n"
]
}
],
"source": [
"!kgtk --debug query -i ../../gdrive-kgtk-dump-2020-12-07/claims.properties.tsv.gz \\\n",
" ../../gdrive-kgtk-dump-2020-12-07/qualifiers.properties.tsv.gz \\\n",
" --match \"p: (nodeProp1)-[nodePropEdge:P2302]->(:Q21510855)\" \\\n",
" -o ../../constraintsOP/inverseConstraint/claims.constraints_list.tsv \\\n",
" --graph-cache ~/sqlite3_caches/temp1345.valuetype.sqlite3.db"
]
},
{
"cell_type": "code",
"execution_count": 64,
"id": "offshore-sudan",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"id\tnode1\tlabel\tnode2\trank\tnode2;wikidatatype\r\n",
"P1026-P2302-Q21510855-adc83b86-0\tP1026\tP2302\tQ21510855\tnormal\twikibase-item\r\n",
"P1029-P2302-Q21510855-6b55e057-0\tP1029\tP2302\tQ21510855\tnormal\twikibase-item\r\n",
"P115-P2302-Q21510855-f7aa0b78-0\tP115\tP2302\tQ21510855\tnormal\twikibase-item\r\n",
"P1151-P2302-Q21510855-0d9aa9c6-0\tP1151\tP2302\tQ21510855\tnormal\twikibase-item\r\n",
"P1204-P2302-Q21510855-e3d53bb6-0\tP1204\tP2302\tQ21510855\tnormal\twikibase-item\r\n",
"P1283-P2302-Q21510855-0e7699bb-0\tP1283\tP2302\tQ21510855\tnormal\twikibase-item\r\n",
"P1308-P2302-Q21510855-2aba96b7-0\tP1308\tP2302\tQ21510855\tnormal\twikibase-item\r\n",
"P1365-P2302-Q21510855-c809b758-0\tP1365\tP2302\tQ21510855\tnormal\twikibase-item\r\n",
"P1366-P2302-Q21510855-eee12ef8-0\tP1366\tP2302\tQ21510855\tnormal\twikibase-item\r\n"
]
}
],
"source": [
"!head ../../constraintsOP/inverseConstraint/claims.constraints_list.tsv"
]
},
{
"cell_type": "code",
"execution_count": 65,
"id": "received-colonial",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"qualiDF = pd.read_csv(\"../../gdrive-kgtk-dump-2020-12-07/qualifiers.properties.tsv.gz\",sep='\\t')\n",
"constDF = pd.read_csv(\"../../constraintsOP/inverseConstraint/claims.constraints_list.tsv\",sep='\\t')"
]
},
{
"cell_type": "code",
"execution_count": 66,
"id": "overall-expense",
"metadata": {},
"outputs": [],
"source": [
"constDF2 = constDF.set_index('id').join(qualiDF.set_index('node1'),rsuffix='_qualifier').drop(columns=['id', 'node2;wikidatatype_qualifier', 'rank', 'node2', 'label', 'node2;wikidatatype']).rename(columns={'label_qualifier':'label', 'node2_qualifier': 'node2'})\n",
"constDF2 = constDF2.reset_index()\n",
"constDF2 = constDF2.rename(columns={'index':'id'})\n",
"constDF2['label'] = constDF2.label.fillna(\"P2316\")\n",
"constDF2['node2'] = constDF2.node2.fillna(\"Normal\")"
]
},
{
"cell_type": "code",
"execution_count": 67,
"id": "valid-throat",
"metadata": {},
"outputs": [],
"source": [
"constDF2.to_csv(\"../../constraintsOP/inverseConstraint/claims.constraints_all.tsv\",sep=\"\\t\",index=False)"
]
},
{
"cell_type": "code",
"execution_count": 68,
"id": "focused-pennsylvania",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import math\n",
"dfItemRequires = pd.read_csv('../../constraintsOP/inverseConstraint/claims.constraints_all.tsv',sep='\\t')"
]
},
{
"cell_type": "code",
"execution_count": 69,
"id": "moved-rental",
"metadata": {},
"outputs": [],
"source": [
"dfItemRequires = dfItemRequires.groupby(['id','node1','label']).node2.apply(lambda p: p.tolist()).reset_index()"
]
},
{
"cell_type": "code",
"execution_count": 70,
"id": "attached-rings",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['P2306', 'P2316', 'P4155', 'P2303'], dtype=object)"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires['label'].unique()"
]
},
{
"cell_type": "code",
"execution_count": 71,
"id": "loving-mileage",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"P2306 110\n",
"P2316 10\n",
"P2303 2\n",
"P4155 1\n",
"Name: label, dtype: int64"
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires['label'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 72,
"id": "local-forty",
"metadata": {},
"outputs": [],
"source": [
"#Reference: https://stackoverflow.com/a/17298454\n",
"# dfItemRequires.pivot_table('node2', ['node1', 'id'], 'label')\n",
"dfItemRequires = dfItemRequires.pivot(index=['node1','id'], columns='label', values='node2')"
]
},
{
"cell_type": "code",
"execution_count": 73,
"id": "pressed-upset",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" label \n",
" P2303 \n",
" P2306 \n",
" P2316 \n",
" P4155 \n",
" \n",
" \n",
" node1 \n",
" id \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" P1026 \n",
" P1026-P2302-Q21510855-adc83b86-0 \n",
" NaN \n",
" [P50] \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P1029 \n",
" P1029-P2302-Q21510855-6b55e057-0 \n",
" NaN \n",
" [P5096] \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P115 \n",
" P115-P2302-Q21510855-f7aa0b78-0 \n",
" NaN \n",
" [P466] \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P1151 \n",
" P1151-P2302-Q21510855-0d9aa9c6-0 \n",
" NaN \n",
" [P1204] \n",
" [Q21502408] \n",
" NaN \n",
" \n",
" \n",
" P1204 \n",
" P1204-P2302-Q21510855-e3d53bb6-0 \n",
" NaN \n",
" [P1151] \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
"label P2303 P2306 P2316 P4155\n",
"node1 id \n",
"P1026 P1026-P2302-Q21510855-adc83b86-0 NaN [P50] NaN NaN\n",
"P1029 P1029-P2302-Q21510855-6b55e057-0 NaN [P5096] NaN NaN\n",
"P115 P115-P2302-Q21510855-f7aa0b78-0 NaN [P466] NaN NaN\n",
"P1151 P1151-P2302-Q21510855-0d9aa9c6-0 NaN [P1204] [Q21502408] NaN\n",
"P1204 P1204-P2302-Q21510855-e3d53bb6-0 NaN [P1151] NaN NaN"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires.head()"
]
},
{
"cell_type": "code",
"execution_count": 74,
"id": "extra-stomach",
"metadata": {},
"outputs": [],
"source": [
"dfItemRequires = dfItemRequires.droplevel(1)"
]
},
{
"cell_type": "code",
"execution_count": 75,
"id": "seeing-marine",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" label \n",
" P2303 \n",
" P2306 \n",
" P2316 \n",
" P4155 \n",
" \n",
" \n",
" node1 \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" \n",
" P1026 \n",
" NaN \n",
" [P50] \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P1029 \n",
" NaN \n",
" [P5096] \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P115 \n",
" NaN \n",
" [P466] \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" P1151 \n",
" NaN \n",
" [P1204] \n",
" [Q21502408] \n",
" NaN \n",
" \n",
" \n",
" P1204 \n",
" NaN \n",
" [P1151] \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
"label P2303 P2306 P2316 P4155\n",
"node1 \n",
"P1026 NaN [P50] NaN NaN\n",
"P1029 NaN [P5096] NaN NaN\n",
"P115 NaN [P466] NaN NaN\n",
"P1151 NaN [P1204] [Q21502408] NaN\n",
"P1204 NaN [P1151] NaN NaN"
]
},
"execution_count": 75,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires.head()"
]
},
{
"cell_type": "markdown",
"id": "composite-cutting",
"metadata": {},
"source": [
"### Query Generator"
]
},
{
"cell_type": "code",
"execution_count": 76,
"id": "acoustic-belarus",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "4db7288263d84bb0b8b61c4e3345a56c",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"0it [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from tqdm.notebook import tqdm\n",
"import os.path\n",
"import os\n",
"\n",
"cnt = 0\n",
"fCnt = 0\n",
"fOP = None\n",
"\n",
"folderName = 'inverseConstraint_Final'\n",
"shellFileSuffix = 'invConst_Validator_new3_'\n",
"graph_cache_file_prefix = \"inv_4_\"\n",
"\n",
"for prop, constraint in tqdm(dfItemRequires.iterrows()):\n",
"# try:\n",
" \n",
" if type(constraint['P2316']) == list:\n",
" if constraint['P2316'][0] == 'Q21502408':\n",
" subFolderName = \"mandatory\"\n",
" elif constraint['P2316'][0] == 'Q62026391':\n",
" subFolderName = \"suggestion\"\n",
" else:\n",
" subFolderName = \"normal\"\n",
" \n",
" if not(os.path.isfile(\"../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv\")):\n",
" continue\n",
" \n",
" prop2 = constraint['P2306']\n",
"\n",
" if type(prop2) != list:\n",
" continue\n",
" prop2 = prop2[0]\n",
"\n",
" if not(os.path.isfile(\"../../propertiesSplitWRemoved2/claims.\"+ prop2 +\".tsv\")):\n",
" print(f\"File: ../../propertiesSplitWRemoved2/claims.{prop2}.tsv does not exist\")\n",
" continue\n",
" \n",
" if cnt % 40 == 0:\n",
" if fOP:\n",
" fOP.close()\n",
" fCnt += 1\n",
" fOP = open(\"../../propertiesSplitWRemoved2/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n",
" \n",
" \n",
" command = \"{ time ( kgtk --debug query -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
" ../../propertiesSplitWRemoved2/claims.\"+ prop2 +\".tsv \\\n",
" --match '\"+ \\\n",
" f\"{prop}: (node1)-[nodeProp]->(node2), {prop2}: (node2)-[]->(node1)' \"\n",
"\n",
" if type(constraint['P2303']) != list: # Exceptions not present\n",
" commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplitWRemoved2/checkViolations/exec_logs/\" + shellFileSuffix + str(fCnt) + \".txt;\\n\"\n",
"# print(command)\n",
" fOP.write(command)\n",
" else:\n",
" excptns = set(constraint['P2303'])\n",
" commandRest = \" --return 'distinct nodeProp.id, node1 as `node1`, nodeProp.label as `label`, node2 as `node2`' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect_wo_exceptions.tsv; \"\n",
"# print(command)\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk --debug query -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\" + str(graph_cache_file_prefix) + str(fCnt) + \".sqlite3.db; \"\n",
"# print(command) \n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk --debug ifnotexists -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --filter-on ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n",
" --filter-mode NONE \\\n",
" --input-keys node1 label \\\n",
" --filter-keys node1 label \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n",
"# print(command)\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk cat -i ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n",
" -o ../../allConstraintsAnalysisWRemoved2/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplitWRemoved2/checkViolations/exec_logs/\" + shellFileSuffix + str(fCnt) + \".txt; \\n\"\n",
"# print(command)\n",
" fOP.write(command)\n",
" \n",
" \n",
" cnt += 1\n",
"# except:\n",
"# print(\"Something failed for prop:\",prop)\n",
"if fOP:\n",
" fOP.close()"
]
},
{
"cell_type": "code",
"execution_count": 77,
"id": "large-climb",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"110"
]
},
"execution_count": 77,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cnt"
]
},
{
"cell_type": "code",
"execution_count": 78,
"id": "involved-vietnamese",
"metadata": {},
"outputs": [],
"source": [
"# import os\n",
"# for i in range(1,7):\n",
"# os.system(\"screen -dm sh ../../propertiesSplitWRemoved2/checkViolations/invConst_Validator_new3_\"+str(i)+\".sh\")"
]
},
{
"cell_type": "markdown",
"id": "retired-audio",
"metadata": {},
"source": [
"### Analyze Violations"
]
},
{
"cell_type": "code",
"execution_count": 57,
"id": "specified-evanescence",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "a1a12be02d794481802d7761a975afcc",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"0it [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "f69d40508fec4092844cf5e53811c7c3",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/12 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "323f0891a42e4031a69242b79b96d40e",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/206 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "c9f035ac53c74a208b91e146011cbdf6",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/8 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import pandas as pd\n",
"import os\n",
"from tqdm.notebook import tqdm\n",
"\n",
"invConstViolations = {}\n",
"\n",
"def countLines(fname):\n",
" cnt = -1\n",
" with open(fname, 'r') as f:\n",
" for line in f:\n",
" cnt += 1\n",
" return cnt\n",
"\n",
"invConstViolations = {}\n",
"invConstPropList = set()\n",
"\n",
"# codepConstViolationsSummary = {}\n",
"\n",
"\n",
"filePath = \"../../allConstraintsAnalysisWRemoved2/inverseConstraint_Final/\"\n",
"for folder in tqdm(iter(['mandatory','normal','suggestion'])):\n",
" for filename in tqdm(os.listdir(filePath + folder)):\n",
" prop = filename.split(\".\")[1]\n",
" correctness = filename.split(\".\")[2]\n",
" if correctness not in ['correct','incorrect']:\n",
" continue\n",
" invConstPropList.add(prop)\n",
" count1 = countLines(filePath+folder+'/'+filename)\n",
" if folder not in invConstViolations:\n",
" invConstViolations[folder] = {}\n",
" if prop not in invConstViolations[folder]:\n",
" invConstViolations[folder][prop] = {'correct': 0, 'incorrect': 0, 'paths': []}\n",
" invConstViolations[folder][prop][correctness] = count1\n",
" invConstViolations[folder][prop]['paths'].append(filePath+folder+'/'+filename)"
]
},
{
"cell_type": "code",
"execution_count": 58,
"id": "circular-africa",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"110"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(invConstPropList)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"id": "recreational-world",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "c162eab0f85e4f9e8571a2c01c36e580",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"0it [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"invConstViolationsSummary = {}\n",
"for folder in tqdm(iter(['mandatory','normal','suggestion'])):\n",
" invConstViolationsSummary[folder] = {'correct': 0, 'incorrect': 0}\n",
" for prop in invConstViolations[folder].keys():\n",
" invConstViolationsSummary[folder]['correct'] += invConstViolations[folder][prop]['correct']\n",
" invConstViolationsSummary[folder]['incorrect'] += invConstViolations[folder][prop]['incorrect']\n",
" invConstViolationsSummary[folder]['total'] = invConstViolationsSummary[folder]['correct'] + invConstViolationsSummary[folder]['incorrect']\n",
" invConstViolationsSummary[folder]['percIncorrect'] = invConstViolationsSummary[folder]['incorrect'] / invConstViolationsSummary[folder]['total'] * 100\n",
" invConstViolationsSummary[folder]['propCount'] = len(invConstViolations[folder].keys())"
]
},
{
"cell_type": "code",
"execution_count": 60,
"id": "headed-singer",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'mandatory': {'correct': 6872,\n",
" 'incorrect': 143,\n",
" 'total': 7015,\n",
" 'percIncorrect': 2.0384889522451886,\n",
" 'propCount': 6},\n",
" 'normal': {'correct': 7489249,\n",
" 'incorrect': 328065,\n",
" 'total': 7817314,\n",
" 'percIncorrect': 4.1966460602708295,\n",
" 'propCount': 100},\n",
" 'suggestion': {'correct': 2150990,\n",
" 'incorrect': 99214,\n",
" 'total': 2250204,\n",
" 'percIncorrect': 4.409111351681892,\n",
" 'propCount': 4}}"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"invConstViolationsSummary"
]
},
{
"cell_type": "code",
"execution_count": 61,
"id": "russian-steering",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"10074533"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"noOfStmts = 0\n",
"for fold in invConstViolationsSummary.keys():\n",
" noOfStmts += invConstViolationsSummary[fold]['total']\n",
"noOfStmts"
]
},
{
"cell_type": "code",
"execution_count": 62,
"id": "sustained-prediction",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" violation_ratio \n",
" \n",
" \n",
" \n",
" \n",
" P2673 \n",
" 839 \n",
" 67 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.073951 \n",
" \n",
" \n",
" P4147 \n",
" 286 \n",
" 8 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.027211 \n",
" \n",
" \n",
" P4149 \n",
" 286 \n",
" 4 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.013793 \n",
" \n",
" \n",
" P2033 \n",
" 1879 \n",
" 25 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.013130 \n",
" \n",
" \n",
" P450 \n",
" 1779 \n",
" 22 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.012215 \n",
" \n",
" \n",
" P1151 \n",
" 1803 \n",
" 17 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.009341 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P2673 839 67 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P4147 286 8 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P4149 286 4 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P2033 1879 25 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P450 1779 22 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P1151 1803 17 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"\n",
" violation_ratio \n",
"P2673 0.073951 \n",
"P4147 0.027211 \n",
"P4149 0.013793 \n",
"P2033 0.013130 \n",
"P450 0.012215 \n",
"P1151 0.009341 "
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"invConstDF1 = pd.DataFrame(invConstViolations['mandatory']).T\n",
"invConstDF1['violation_ratio'] = invConstDF1.apply(lambda p: p.incorrect / (p.correct + p.incorrect), axis=1)\n",
"invConstDF1.sort_values(by=['violation_ratio'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": 63,
"id": "valid-symposium",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" violation_ratio \n",
" \n",
" \n",
" \n",
" \n",
" P1434 \n",
" 3677 \n",
" 5003 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.576382 \n",
" \n",
" \n",
" P155 \n",
" 1036647 \n",
" 53103 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.048730 \n",
" \n",
" \n",
" P156 \n",
" 1036636 \n",
" 40868 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.037928 \n",
" \n",
" \n",
" P629 \n",
" 74030 \n",
" 240 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.003231 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P1434 3677 5003 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P155 1036647 53103 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P156 1036636 40868 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P629 74030 240 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"\n",
" violation_ratio \n",
"P1434 0.576382 \n",
"P155 0.048730 \n",
"P156 0.037928 \n",
"P629 0.003231 "
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"invConstDF2 = pd.DataFrame(invConstViolations['suggestion']).T\n",
"invConstDF2['violation_ratio'] = invConstDF2.apply(lambda p: p.incorrect / (p.correct + p.incorrect), axis=1)\n",
"invConstDF2.sort_values(by=['violation_ratio'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": 64,
"id": "resident-mustang",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" violation_ratio \n",
" \n",
" \n",
" \n",
" \n",
" P1605 \n",
" 13 \n",
" 190 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.935961 \n",
" \n",
" \n",
" P3448 \n",
" 605 \n",
" 4575 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.883205 \n",
" \n",
" \n",
" P926 \n",
" 1 \n",
" 5 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.833333 \n",
" \n",
" \n",
" P925 \n",
" 1 \n",
" 5 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.833333 \n",
" \n",
" \n",
" P1029 \n",
" 490 \n",
" 2397 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.830274 \n",
" \n",
" \n",
" P115 \n",
" 6948 \n",
" 24721 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.780606 \n",
" \n",
" \n",
" P5134 \n",
" 23 \n",
" 54 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.701299 \n",
" \n",
" \n",
" P3816 \n",
" 14 \n",
" 27 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.658537 \n",
" \n",
" \n",
" P1283 \n",
" 1405 \n",
" 2423 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.632968 \n",
" \n",
" \n",
" P8625 \n",
" 9 \n",
" 15 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.625000 \n",
" \n",
" \n",
" P5132 \n",
" 81 \n",
" 90 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.526316 \n",
" \n",
" \n",
" P425 \n",
" 2741 \n",
" 2938 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.517345 \n",
" \n",
" \n",
" P2512 \n",
" 221 \n",
" 159 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.418421 \n",
" \n",
" \n",
" P1677 \n",
" 6 \n",
" 4 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.400000 \n",
" \n",
" \n",
" P2578 \n",
" 1111 \n",
" 622 \n",
" [../../allConstraintsAnalysisWRemoved2/inverse... \n",
" 0.358915 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P1605 13 190 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P3448 605 4575 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P926 1 5 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P925 1 5 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P1029 490 2397 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P115 6948 24721 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P5134 23 54 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P3816 14 27 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P1283 1405 2423 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P8625 9 15 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P5132 81 90 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P425 2741 2938 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P2512 221 159 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P1677 6 4 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"P2578 1111 622 [../../allConstraintsAnalysisWRemoved2/inverse... \n",
"\n",
" violation_ratio \n",
"P1605 0.935961 \n",
"P3448 0.883205 \n",
"P926 0.833333 \n",
"P925 0.833333 \n",
"P1029 0.830274 \n",
"P115 0.780606 \n",
"P5134 0.701299 \n",
"P3816 0.658537 \n",
"P1283 0.632968 \n",
"P8625 0.625000 \n",
"P5132 0.526316 \n",
"P425 0.517345 \n",
"P2512 0.418421 \n",
"P1677 0.400000 \n",
"P2578 0.358915 "
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"invConstDF3 = pd.DataFrame(invConstViolations['normal']).T\n",
"invConstDF3['violation_ratio'] = invConstDF3.apply(lambda p: p.incorrect / (p.correct + p.incorrect), axis=1)\n",
"invConstDF3.sort_values(by=['violation_ratio'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": 65,
"id": "dietary-venue",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"head: cannot open ‘../../allConstraintsAnalysisWRemoved2/inverseConstraint/normal/claims.P925.incorrect.tsv’ for reading: No such file or directory\r\n"
]
}
],
"source": [
"!head ../../allConstraintsAnalysisWRemoved2/inverseConstraint/normal/claims.P925.incorrect.tsv"
]
},
{
"cell_type": "code",
"execution_count": 66,
"id": "entire-gauge",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Symmetric Normal Constraint - Violation Ratios')"
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"invConstDF3.sort_values(by=['violation_ratio'],ascending=False)['violation_ratio'].plot.hist(bins=100).set_title(\"Symmetric Normal Constraint - Violation Ratios\")"
]
},
{
"cell_type": "markdown",
"id": "working-stable",
"metadata": {},
"source": [
"### Find out time required"
]
},
{
"cell_type": "code",
"execution_count": 55,
"id": "saved-twelve",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "2e8a241c831b4968ae22d06c22c6e85e",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/122 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import pandas as pd\n",
"import os\n",
"from tqdm.notebook import tqdm\n",
"\n",
"codepConstViolations = {}\n",
"\n",
"codepConstViolations = {}\n",
"codepConstPropList = set()\n",
"\n",
"def extractTimes(filename):\n",
" times = []\n",
" with open(filename) as f:\n",
" for line in f:\n",
" if \"real\" in line:\n",
" line = line.strip()\n",
" time1 = line.split(\"\\t\")[1]\n",
" mins, sec = time1.split(\"m\")\n",
" mins = int(mins)\n",
" sec = float(sec[:-1])\n",
" times.append(60 * mins + sec)\n",
" return times\n",
"\n",
"# codepConstViolationsSummary = {}\n",
"times = []\n",
"filePath = '/data/wd-correctness/propertiesSplitWRemoved2/checkViolations/exec_logs/'\n",
"for filename in tqdm(os.listdir(filePath)):\n",
" if filename.startswith(\"invConst_Validator_new3\"):\n",
" tempTimes = extractTimes(filePath + filename)\n",
" times += tempTimes"
]
},
{
"cell_type": "code",
"execution_count": 56,
"id": "caroline-observation",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"count 110.000000\n",
"mean 7.526318\n",
"std 11.686634\n",
"min 1.519000\n",
"25% 2.624000\n",
"50% 3.298500\n",
"75% 6.463250\n",
"max 80.846000\n",
"dtype: float64\n"
]
}
],
"source": [
"print(pd.Series(times).describe())"
]
},
{
"cell_type": "code",
"execution_count": 57,
"id": "static-conclusion",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Distribution of times (in s) taken for symmetric constraint checks')"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import seaborn as sns\n",
"sns.lineplot(data=pd.Series(times)).set_title(\"Distribution of times (in s) taken for symmetric constraint checks\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "numerical-month",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "stuck-criticism",
"metadata": {},
"source": [
"# Analysis on properties with constraints"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "driven-reference",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2021-04-03 09:14:12 query]: SQL Translation:\r\n",
"---------------------------------------------\r\n",
" SELECT *\r\n",
" FROM graph_1 AS graph_1_c1\r\n",
" WHERE graph_1_c1.\"label\"=?\r\n",
" PARAS: ['P2302']\r\n",
"---------------------------------------------\r\n"
]
}
],
"source": [
"!kgtk --debug query -i ../../gdrive-kgtk-dump-2020-12-07/claims.properties.tsv.gz \\\n",
" ../../gdrive-kgtk-dump-2020-12-07/qualifiers.properties.tsv.gz \\\n",
" --match \"p: (nodeProp1)-[nodePropEdge:P2302]->()\" \\\n",
" -o ../../constraintsOP/claims.constraints_list.tsv \\\n",
" --graph-cache ~/sqlite3_caches/temp1345.valuetype.sqlite3.db"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "exciting-focus",
"metadata": {},
"outputs": [],
"source": [
"!kgtk unique -i ../../gdrive-kgtk-dump-2020-12-07/claims.properties.tsv.gz --column node1 -o ../../constraintsOP/claims.propList.tsv"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "flush-romania",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"node1\tlabel\tnode2\r\n",
"P10\tcount\t17\r\n",
"P1000\tcount\t10\r\n",
"P1001\tcount\t26\r\n",
"P1002\tcount\t9\r\n",
"P1003\tcount\t20\r\n",
"P1004\tcount\t33\r\n",
"P1005\tcount\t21\r\n",
"P1006\tcount\t26\r\n",
"P1007\tcount\t19\r\n"
]
}
],
"source": [
"!head ../../constraintsOP/claims.propList.tsv"
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "chemical-harris",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import os\n",
"props = pd.read_csv(\"../../constraintsOP/claims.constraints_list.tsv\", sep='\\t')"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "higher-underground",
"metadata": {},
"outputs": [],
"source": [
"props2 = props.groupby(['node1']).node2.apply(list)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"id": "light-appreciation",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"8100"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(props2)"
]
},
{
"cell_type": "code",
"execution_count": 48,
"id": "yellow-helmet",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(2336, 8100)"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cnt = 0\n",
"totalCnt = 0\n",
"for prop in props2.index:\n",
" totalCnt += 1\n",
" if not(os.path.isfile(\"../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv\")):\n",
" continue\n",
" else:\n",
" cnt += 1\n",
"cnt, totalCnt"
]
},
{
"cell_type": "code",
"execution_count": 50,
"id": "detected-skiing",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"node1\n",
"P10 [Q21502404, Q21510851, Q21510852, Q52004125, Q...\n",
"P1000 [Q21510856, Q21510865, Q53869507]\n",
"P1001 [Q21502838, Q21503250, Q21510865, Q25796498]\n",
"P1002 [Q21503250, Q21510865]\n",
"P1003 [Q19474404, Q21502404, Q21502410, Q21510851, Q...\n",
" ... \n",
"P1563 [Q19474404, Q21502404, Q21502410, Q21503247, Q...\n",
"P1564 [Q19474404, Q21502404, Q21502410, Q21503247, Q...\n",
"P1565 [Q19474404, Q21502404, Q21502410, Q21503247, Q...\n",
"P1566 [Q19474404, Q21502404, Q21502410, Q21502838, Q...\n",
"P1567 [Q19474404, Q21502404, Q21502410, Q21502838, Q...\n",
"Name: node2, Length: 500, dtype: object"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"props2.head(500)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "processed-perfume",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import os\n",
"props2 = pd.read_csv(\"../../constraintsOP/claims.propList.tsv\", sep='\\t')"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "increasing-graphics",
"metadata": {},
"outputs": [],
"source": [
"props2 = props2.groupby(['node1']).node2.apply(list)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "posted-ukraine",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"8193"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(props2)"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "fifth-provision",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(2415, 8193)"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cnt = 0\n",
"totalCnt = 0\n",
"for prop in props2.index:\n",
" totalCnt += 1\n",
" if not(os.path.isfile(\"../../propertiesSplitWRemoved2/claims.\"+ prop +\".tsv\")):\n",
" continue\n",
" else:\n",
" cnt += 1\n",
"cnt, totalCnt"
]
},
{
"cell_type": "code",
"execution_count": 50,
"id": "married-heating",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"node1\n",
"P10 [Q21502404, Q21510851, Q21510852, Q52004125, Q...\n",
"P1000 [Q21510856, Q21510865, Q53869507]\n",
"P1001 [Q21502838, Q21503250, Q21510865, Q25796498]\n",
"P1002 [Q21503250, Q21510865]\n",
"P1003 [Q19474404, Q21502404, Q21502410, Q21510851, Q...\n",
" ... \n",
"P1563 [Q19474404, Q21502404, Q21502410, Q21503247, Q...\n",
"P1564 [Q19474404, Q21502404, Q21502410, Q21503247, Q...\n",
"P1565 [Q19474404, Q21502404, Q21502410, Q21503247, Q...\n",
"P1566 [Q19474404, Q21502404, Q21502410, Q21502838, Q...\n",
"P1567 [Q19474404, Q21502404, Q21502410, Q21502838, Q...\n",
"Name: node2, Length: 500, dtype: object"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"props2.head(500)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "magnetic-conditions",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "kgtkEnv",
"language": "python",
"name": "kgtkenv"
},
"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.8.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": {
"height": "calc(100% - 180px)",
"left": "10px",
"top": "150px",
"width": "318px"
},
"toc_section_display": true,
"toc_window_display": true
},
"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()) "
}
},
"oldHeight": 122,
"position": {
"height": "40px",
"left": "1170px",
"right": "20px",
"top": "120px",
"width": "250px"
},
"types_to_exclude": [
"module",
"function",
"builtin_function_or_method",
"instance",
"_Feature"
],
"varInspector_section_display": "none",
"window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 5
}