{
"cells": [
{
"cell_type": "markdown",
"id": "liberal-publisher",
"metadata": {},
"source": [
"# Comprehensive Constraints Analysis - With Removed Statements - Final\n",
"\n",
"In this notebook, the original dataset is combined with the removed statements dataset and then the violations are determined in total."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "juvenile-ability",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "8f09d8d199d445fbb9e4ed86e3bb148e",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/1149471184 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Split claims file into multiple files\n",
"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(\"../../propertiesSplit_WRemoved_Final/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": "markdown",
"id": "matched-strength",
"metadata": {},
"source": [
"# Generate Queries"
]
},
{
"cell_type": "markdown",
"id": "black-insured",
"metadata": {},
"source": [
"## Type Constraint\n",
"\n",
"Type constraint indicates that node1 must be an instance of or subclass of the class specified."
]
},
{
"cell_type": "markdown",
"id": "interior-humor",
"metadata": {},
"source": [
"### Understand Constraints File"
]
},
{
"cell_type": "code",
"execution_count": null,
"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": null,
"id": "assured-cleaners",
"metadata": {},
"outputs": [],
"source": [
"df1 = df.groupby(['node1','label']).node2.apply(lambda p: p.tolist()).reset_index()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "sharing-evolution",
"metadata": {},
"outputs": [],
"source": [
"df1.head()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "still-trail",
"metadata": {},
"outputs": [],
"source": [
"df1[df1['node1'] == 'P8138']"
]
},
{
"cell_type": "markdown",
"id": "solid-browser",
"metadata": {},
"source": [
"### Query Generator"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "bright-impossible",
"metadata": {},
"outputs": [],
"source": [
"from tqdm.notebook import tqdm\n",
"import os.path\n",
"import os\n",
"\n",
"cnt = 0\n",
"fCnt = 1\n",
"\n",
"fOP = None\n",
"\n",
"for prop in tqdm(df1.node1.unique()):\n",
" try:\n",
" if not(os.path.isfile(\"../../propertiesSplit_WRemoved_Final/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'\n",
" shellFileSuffix = 'typeConstraintValidator'\n",
" \n",
" if cnt % 120 == 0:\n",
" if fOP:\n",
" fOP.close()\n",
" fOP = open(\"../../propertiesSplit_WRemoved_Final/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n",
" fCnt += 1\n",
" \n",
" fOP.write(\"{ time (kgtk --debug query -i ../../propertiesSplit_WRemoved_Final/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 ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp.tsv \\\n",
" --graph-cache ~/sqlite3_caches/type_new2_\" + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp.tsv \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect_temp.tsv ;\\\n",
" kgtk --debug query -i ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect_temp.tsv \\\n",
" ../../wikidata-20210215/derived.\" + parentFile + \".tsv.gz \\\n",
" --match 'm: (node1)-[nodeProp]->(node2), \" + parentFile + \": (node1)-[]->(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 ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp2.tsv \\\n",
" --graph-cache ~/sqlite3_caches/type_new2_\" + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect_temp.tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp2.tsv \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect.tsv ; \\\n",
" kgtk --debug cat -i ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp.tsv \\\n",
" ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp2.tsv \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct.tsv ; \\\n",
" ) } 2>> ../../propertiesSplit_WRemoved_Final/checkViolations/exec_logs/\" + shellFileSuffix + str(fCnt) + \".txt;\\n\")\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": null,
"id": "electrical-agreement",
"metadata": {},
"outputs": [],
"source": [
"cnt"
]
},
{
"cell_type": "code",
"execution_count": 72,
"id": "outside-stupid",
"metadata": {},
"outputs": [],
"source": [
"# import os\n",
"# for i in range(1,14):\n",
"# os.system(\"screen -dm sh ../../propertiesSplit_WRemoved_Final/checkViolations/typeConstraintValidator\"+str(i)+\".sh\")\n",
" "
]
},
{
"cell_type": "markdown",
"id": "competitive-canvas",
"metadata": {},
"source": [
"### Analyze Violations"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "casual-perth",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "87626194dcff46d9a805455ca60d475c",
"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": "4d4a01eea5e946988b0acf5442b9ae20",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/835 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "a5734514bf88471da923c3118aa45786",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/55 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "58be3fac1b8a4a8db7ba2c69e101629a",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/6435 [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 = \"../../allConstraintsAnalysis_WRemoved_Final/typeConstraint/\"+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",
" if correctness not in ['correct','incorrect']:\n",
" continue\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": 23,
"id": "golden-affiliate",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1465 properties processed for type constraint for 550605745 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": 24,
"id": "needed-portfolio",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"typeConstDF = pd.DataFrame(violations).T"
]
},
{
"cell_type": "code",
"execution_count": 25,
"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": 26,
"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",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 0.012685 \n",
" \n",
" \n",
" P3919 \n",
" 3393 \n",
" 158 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 0.044495 \n",
" \n",
" \n",
" P6185 \n",
" 269 \n",
" 12 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 0.042705 \n",
" \n",
" \n",
" P3922 \n",
" 1824 \n",
" 51 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 0.027200 \n",
" \n",
" \n",
" P301 \n",
" 705949 \n",
" 28017 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 0.038172 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P1303 203148 2610 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P3919 3393 158 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P6185 269 12 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P3922 1824 51 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P301 705949 28017 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"\n",
" violation_ratio \n",
"P1303 0.012685 \n",
"P3919 0.044495 \n",
"P6185 0.042705 \n",
"P3922 0.027200 \n",
"P301 0.038172 "
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"typeConstDF.head()"
]
},
{
"cell_type": "code",
"execution_count": 27,
"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",
" P8138 \n",
" 0 \n",
" 462 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 1.0 \n",
" \n",
" \n",
" P5051 \n",
" 0 \n",
" 81 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 1.0 \n",
" \n",
" \n",
" P2309 \n",
" 0 \n",
" 55 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 1.0 \n",
" \n",
" \n",
" P2308 \n",
" 0 \n",
" 51 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 1.0 \n",
" \n",
" \n",
" P2303 \n",
" 0 \n",
" 44 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 1.0 \n",
" \n",
" \n",
" P1227 \n",
" 0 \n",
" 20 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 1.0 \n",
" \n",
" \n",
" P2912 \n",
" 0 \n",
" 16 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 1.0 \n",
" \n",
" \n",
" P6001 \n",
" 0 \n",
" 16 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 1.0 \n",
" \n",
" \n",
" P8738 \n",
" 0 \n",
" 14 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 1.0 \n",
" \n",
" \n",
" P538 \n",
" 0 \n",
" 10 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 1.0 \n",
" \n",
" \n",
" P8004 \n",
" 0 \n",
" 6 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 1.0 \n",
" \n",
" \n",
" P5589 \n",
" 0 \n",
" 5 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 1.0 \n",
" \n",
" \n",
" P2312 \n",
" 0 \n",
" 5 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 1.0 \n",
" \n",
" \n",
" P6510 \n",
" 0 \n",
" 4 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 1.0 \n",
" \n",
" \n",
" P2310 \n",
" 0 \n",
" 4 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 1.0 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P8138 0 462 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P5051 0 81 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P2309 0 55 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P2308 0 51 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P2303 0 44 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P1227 0 20 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P2912 0 16 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P6001 0 16 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P8738 0 14 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P538 0 10 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P8004 0 6 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P5589 0 5 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P2312 0 5 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P6510 0 4 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P2310 0 4 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"\n",
" violation_ratio \n",
"P8138 1.0 \n",
"P5051 1.0 \n",
"P2309 1.0 \n",
"P2308 1.0 \n",
"P2303 1.0 \n",
"P1227 1.0 \n",
"P2912 1.0 \n",
"P6001 1.0 \n",
"P8738 1.0 \n",
"P538 1.0 \n",
"P8004 1.0 \n",
"P5589 1.0 \n",
"P2312 1.0 \n",
"P6510 1.0 \n",
"P2310 1.0 "
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"typeConstDF.sort_values(by=['violation_ratio','incorrect'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "clinical-lawsuit",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"count 1465.000000\n",
"mean 0.117857\n",
"std 0.226919\n",
"min 0.000000\n",
"25% 0.007233\n",
"50% 0.024422\n",
"75% 0.094675\n",
"max 1.000000\n",
"Name: violation_ratio, dtype: float64"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"typeConstDF['violation_ratio'].describe()"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "wanted-domestic",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Type Constraint Violation Ratios')"
]
},
"execution_count": 31,
"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['violation_ratio'].plot.hist(bins=100).set_title(\"Type Constraint Violation Ratios\")"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "sufficient-hollywood",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Type Constraint Violation Ratios (<=0.05)')"
]
},
"execution_count": 32,
"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": 33,
"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": 36,
"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": 37,
"id": "emotional-favorite",
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'mandatory': {'instanceOf': {'correct': 46306630, 'incorrect': 798106},\n",
" 'subclass': {'correct': 2064, 'incorrect': 53},\n",
" 'instanceOfOrSubclass': {'correct': 233195, 'incorrect': 3169},\n",
" 'propCount': 167,\n",
" 'correct': 46541889,\n",
" 'incorrect': 801328,\n",
" 'VR': 0.016925930487571218},\n",
" 'suggestion': {'instanceOf': {'correct': 62170, 'incorrect': 19110},\n",
" 'subclass': {'correct': 0, 'incorrect': 0},\n",
" 'instanceOfOrSubclass': {'correct': 24237, 'incorrect': 3458},\n",
" 'propCount': 11,\n",
" 'correct': 86407,\n",
" 'incorrect': 22568,\n",
" 'VR': 0.20709337003899977},\n",
" 'normal': {'instanceOf': {'correct': 425791059, 'incorrect': 7991316},\n",
" 'subclass': {'correct': 98826, 'incorrect': 13672},\n",
" 'instanceOfOrSubclass': {'correct': 68383205, 'incorrect': 875475},\n",
" 'propCount': 1287,\n",
" 'correct': 494273090,\n",
" 'incorrect': 8880463,\n",
" 'VR': 0.017649608051162863}}"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"typeConstViolations"
]
},
{
"cell_type": "code",
"execution_count": 38,
"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",
" 148843213 \n",
" 1512369 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 0.010059 \n",
" 150355582 \n",
" \n",
" \n",
" P1476 \n",
" 44100871 \n",
" 2199197 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 0.047499 \n",
" 46300068 \n",
" \n",
" \n",
" P577 \n",
" 39990807 \n",
" 165864 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 0.004130 \n",
" 40156671 \n",
" \n",
" \n",
" P1433 \n",
" 37028672 \n",
" 112955 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 0.003041 \n",
" 37141627 \n",
" \n",
" \n",
" P1215 \n",
" 33425605 \n",
" 316565 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
" 0.009382 \n",
" 33742170 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P2093 148843213 1512369 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P1476 44100871 2199197 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P577 39990807 165864 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P1433 37028672 112955 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"P1215 33425605 316565 [../../allConstraintsAnalysis_WRemoved_Final/t... \n",
"\n",
" violation_ratio total \n",
"P2093 0.010059 150355582 \n",
"P1476 0.047499 46300068 \n",
"P577 0.004130 40156671 \n",
"P1433 0.003041 37141627 \n",
"P1215 0.009382 33742170 "
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"typeConstDF['total'] = typeConstDF['correct'] + typeConstDF['incorrect']\n",
"typeConstDF.sort_values(by=['total'],ascending=False).head()"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "grateful-telling",
"metadata": {},
"outputs": [],
"source": [
"typeConstDF.to_csv('../../allConstraintsAnalysis_WRemoved_Final/typeConstDFAnalysis.csv')"
]
},
{
"cell_type": "markdown",
"id": "bearing-kruger",
"metadata": {},
"source": [
"### Find out time required"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "veterinary-fault",
"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",
"filePath = '/data/wd-correctness/propertiesSplit_WRemoved_Final/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": null,
"id": "infinite-assembly",
"metadata": {},
"outputs": [],
"source": [
"print(pd.Series(times).describe())"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "opened-essex",
"metadata": {},
"outputs": [],
"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\n",
"\n",
"Here, the constraint indicates that node2 must be an instance of or subclass of the specified class"
]
},
{
"cell_type": "markdown",
"id": "animated-companion",
"metadata": {},
"source": [
"### Understand Constraints File"
]
},
{
"cell_type": "code",
"execution_count": null,
"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": null,
"id": "worthy-malawi",
"metadata": {},
"outputs": [],
"source": [
"dfValueType = dfValueType.groupby(['node1','label']).node2.apply(lambda p: p.tolist()).reset_index()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "eleven-tiffany",
"metadata": {},
"outputs": [],
"source": [
"dfValueType.head()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "expired-stuff",
"metadata": {},
"outputs": [],
"source": [
"dfValueType['label'].unique()"
]
},
{
"cell_type": "markdown",
"id": "digital-harvard",
"metadata": {},
"source": [
"### Query Generator"
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "white-badge",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "bb623e1d72164970a40f3bc2d9ab6346",
"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",
"\n",
"fOP = None\n",
"\n",
"for prop in tqdm(dfValueType.node1.unique()):\n",
" try:\n",
" if not(os.path.isfile(\"../../propertiesSplit_WRemoved_Final/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'\n",
" shellFileSuffix = 'valueTypeConstraintValidator'\n",
" \n",
" if cnt % 120 == 0:\n",
" if fOP:\n",
" fOP.close()\n",
" fOP = open(\"../../propertiesSplit_WRemoved_Final/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n",
" fCnt += 1\n",
" \n",
" fOP.write(\"{ time (kgtk --debug query -i ../../propertiesSplit_WRemoved_Final/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 ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp.tsv \\\n",
" --graph-cache ~/sqlite3_caches/valueType_new_\" + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp.tsv \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect_temp.tsv ;\\\n",
" kgtk --debug query -i ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect_temp.tsv \\\n",
" ../../wikidata-20210215/derived.\" + parentFile + \".tsv.gz \\\n",
" --match 'm: (node1)-[nodeProp]->(node2), \" + parentFile + \": (node2)-[]->(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 ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp2.tsv \\\n",
" --graph-cache ~/sqlite3_caches/valueType_new_\" + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect_temp.tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp2.tsv \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".incorrect.tsv ; \\\n",
" kgtk --debug cat -i ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp.tsv \\\n",
" ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct_temp2.tsv \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + typeVal + \"/claims.type-constraints.\" + parentTitle + \".\"+ prop +\".correct.tsv ; \\\n",
" ) } 2>> ../../propertiesSplit_WRemoved_Final/checkViolations/exec_logs/\" + shellFileSuffix + str(fCnt) + \".txt;\\n\")\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": 3,
"id": "capable-ballot",
"metadata": {},
"outputs": [],
"source": [
"!zgrep -P \"Q98970042\\t\" ../../wikidata-20210215/derived.P279star.tsv.gz"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "qualified-cursor",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"897"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cnt"
]
},
{
"cell_type": "code",
"execution_count": 45,
"id": "simplified-cameroon",
"metadata": {},
"outputs": [],
"source": [
"# import os\n",
"# for i in range(1,9):\n",
"# os.system(\"screen -dm sh ../../propertiesSplit_WRemoved_Final/checkViolations/valueTypeConstraintValidator_xverify3\"+str(i)+\".sh\")\n",
" "
]
},
{
"cell_type": "markdown",
"id": "spectacular-warner",
"metadata": {},
"source": [
"### Analyze Violations"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "valid-defense",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "98c5e9ac78ef42519b4391f36064d9ec",
"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": "0de0552b0a8340ad9113f80de62f4ee1",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/540 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "6d5a7dc29ff04326b86c261268afed9e",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/25 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "3f016ff9b2bd4111b63d543051a43155",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/3955 [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 = \"../../allConstraintsAnalysis_WRemoved_Final/valueTypeConstraint/\"+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",
" if correctness not in ['correct','incorrect']:\n",
" continue\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": 43,
"id": "refined-speaking",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"904 properties processed for value type constraint for 191291040 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": 44,
"id": "designed-christian",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"valTypeConstDF = pd.DataFrame(violations).T"
]
},
{
"cell_type": "code",
"execution_count": 45,
"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": 46,
"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",
" 24 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
" 0.005275 \n",
" \n",
" \n",
" P2363 \n",
" 4404 \n",
" 0 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
" 0.000000 \n",
" \n",
" \n",
" P7327 \n",
" 187 \n",
" 6 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
" 0.031088 \n",
" \n",
" \n",
" P853 \n",
" 1600 \n",
" 8 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
" 0.004975 \n",
" \n",
" \n",
" P2302 \n",
" 47918 \n",
" 35 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
" 0.000730 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P852 4526 24 [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
"P2363 4404 0 [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
"P7327 187 6 [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
"P853 1600 8 [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
"P2302 47918 35 [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
"\n",
" violation_ratio \n",
"P852 0.005275 \n",
"P2363 0.000000 \n",
"P7327 0.031088 \n",
"P853 0.004975 \n",
"P2302 0.000730 "
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"valTypeConstDF.head()"
]
},
{
"cell_type": "code",
"execution_count": 47,
"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",
" [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
" 1.0 \n",
" \n",
" \n",
" P6104 \n",
" 0 \n",
" 9808 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
" 1.0 \n",
" \n",
" \n",
" P7374 \n",
" 0 \n",
" 44 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
" 1.0 \n",
" \n",
" \n",
" P3028 \n",
" 0 \n",
" 15 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
" 1.0 \n",
" \n",
" \n",
" P2839 \n",
" 0 \n",
" 15 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
" 1.0 \n",
" \n",
" \n",
" P3027 \n",
" 0 \n",
" 13 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
" 1.0 \n",
" \n",
" \n",
" P538 \n",
" 0 \n",
" 10 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
" 1.0 \n",
" \n",
" \n",
" P2241 \n",
" 0 \n",
" 6 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
" 1.0 \n",
" \n",
" \n",
" P4425 \n",
" 0 \n",
" 6 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
" 1.0 \n",
" \n",
" \n",
" P6191 \n",
" 0 \n",
" 5 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
" 1.0 \n",
" \n",
" \n",
" P6533 \n",
" 0 \n",
" 5 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
" 1.0 \n",
" \n",
" \n",
" P6534 \n",
" 0 \n",
" 5 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
" 1.0 \n",
" \n",
" \n",
" P660 \n",
" 0 \n",
" 4 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
" 1.0 \n",
" \n",
" \n",
" P7174 \n",
" 0 \n",
" 3 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
" 1.0 \n",
" \n",
" \n",
" P8627 \n",
" 0 \n",
" 2 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
" 1.0 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P5008 0 341961 [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
"P6104 0 9808 [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
"P7374 0 44 [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
"P3028 0 15 [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
"P2839 0 15 [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
"P3027 0 13 [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
"P538 0 10 [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
"P2241 0 6 [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
"P4425 0 6 [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
"P6191 0 5 [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
"P6533 0 5 [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
"P6534 0 5 [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
"P660 0 4 [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
"P7174 0 3 [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
"P8627 0 2 [../../allConstraintsAnalysis_WRemoved_Final/v... \n",
"\n",
" violation_ratio \n",
"P5008 1.0 \n",
"P6104 1.0 \n",
"P7374 1.0 \n",
"P3028 1.0 \n",
"P2839 1.0 \n",
"P3027 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 \n",
"P660 1.0 \n",
"P7174 1.0 \n",
"P8627 1.0 "
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"valTypeConstDF.sort_values(by=['violation_ratio','incorrect'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": 49,
"id": "cutting-polyester",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"count 904.000000\n",
"mean 0.112995\n",
"std 0.211926\n",
"min 0.000000\n",
"25% 0.006362\n",
"50% 0.024834\n",
"75% 0.099675\n",
"max 1.000000\n",
"Name: violation_ratio, dtype: float64"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"valTypeConstDF['violation_ratio'].describe()"
]
},
{
"cell_type": "code",
"execution_count": 50,
"id": "alert-receiver",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Value Type Constraint Violation Ratios')"
]
},
"execution_count": 50,
"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": 51,
"id": "italian-motel",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Value Type Constraint Violation Ratios (<=0.04)')"
]
},
"execution_count": 51,
"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": 52,
"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": 55,
"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": 56,
"id": "satellite-concern",
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'mandatory': {'instanceOf': {'correct': 11564885, 'incorrect': 30391},\n",
" 'subclass': {'correct': 55983, 'incorrect': 83},\n",
" 'instanceOfOrSubclass': {'correct': 13090, 'incorrect': 320},\n",
" 'propCount': 108,\n",
" 'correct': 11633958,\n",
" 'incorrect': 30794,\n",
" 'VR': 0.0026399189627006217},\n",
" 'suggestion': {'instanceOf': {'correct': 46189, 'incorrect': 715},\n",
" 'subclass': {'correct': 127, 'incorrect': 32},\n",
" 'instanceOfOrSubclass': {'correct': 0, 'incorrect': 0},\n",
" 'propCount': 5,\n",
" 'correct': 46316,\n",
" 'incorrect': 747,\n",
" 'VR': 0.01587234132970699},\n",
" 'normal': {'instanceOf': {'correct': 94116782, 'incorrect': 2067912},\n",
" 'subclass': {'correct': 4674914, 'incorrect': 73885},\n",
" 'instanceOfOrSubclass': {'correct': 77686563, 'incorrect': 959169},\n",
" 'propCount': 791,\n",
" 'correct': 176478259,\n",
" 'incorrect': 3100966,\n",
" 'VR': 0.01726795513233783}}"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"valueTypeConstViolations"
]
},
{
"cell_type": "code",
"execution_count": 57,
"id": "fabulous-sudan",
"metadata": {},
"outputs": [],
"source": [
"valTypeConstDF.to_csv('../../allConstraintsAnalysis_WRemoved_Final/valueTypeConstDFAnalysis.csv')"
]
},
{
"cell_type": "markdown",
"id": "traditional-shakespeare",
"metadata": {},
"source": [
"### Find out time required"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "spoken-symphony",
"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",
"filePath = '/data/wd-correctness/propertiesSplit_WRemoved_Final/checkViolations/exec_logs/'\n",
"for filename in tqdm(os.listdir(filePath)):\n",
" if filename.startswith(\"valueTypeConstraintValidator\"):\n",
" tempTimes = extractTimes(filePath + filename)\n",
" times += tempTimes"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "heavy-argentina",
"metadata": {},
"outputs": [],
"source": [
"print(pd.Series(times).describe())"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "organized-mixer",
"metadata": {},
"outputs": [],
"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\n",
"\n",
"Here, the constraint mentions the other properties that node1 must have and the values that this property must have in few cases"
]
},
{
"cell_type": "markdown",
"id": "chubby-glass",
"metadata": {},
"source": [
"### Understand Constraints File"
]
},
{
"cell_type": "code",
"execution_count": 58,
"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": 59,
"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": 60,
"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": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires['label'].unique()"
]
},
{
"cell_type": "code",
"execution_count": 61,
"id": "infrared-canal",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"P2306 7182\n",
"P2305 2540\n",
"P2316 2523\n",
"P2303 422\n",
"P2304 14\n",
"P6607 14\n",
"P2916 5\n",
"P4680 2\n",
"P4155 1\n",
"P31 1\n",
"P2308 1\n",
"Name: label, dtype: int64"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires['label'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 62,
"id": "focused-karen",
"metadata": {},
"outputs": [],
"source": [
"#Reference: https://stackoverflow.com/a/17298454\n",
"dfItemRequires = dfItemRequires.pivot(index=['node1','id'], columns='label', values='node2')"
]
},
{
"cell_type": "code",
"execution_count": 63,
"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": 63,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires.head()"
]
},
{
"cell_type": "code",
"execution_count": 64,
"id": "conceptual-schedule",
"metadata": {},
"outputs": [],
"source": [
"dfItemRequires = dfItemRequires.droplevel(1)"
]
},
{
"cell_type": "code",
"execution_count": 65,
"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": 65,
"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": 66,
"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": 66,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires[dfItemRequires['P4680'].apply(lambda p: type(p) == list)]"
]
},
{
"cell_type": "code",
"execution_count": 67,
"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": 67,
"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": 11,
"id": "turkish-establishment",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"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: ../../propertiesSplit_WRemoved_Final/claims.P345.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P2604.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1566.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1566.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P2355.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P3350.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1014.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P2636.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1771.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P2755.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P8326.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P5128.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1627.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P954.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P498.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1297.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P8680.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P715.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P2606.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P8303.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/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",
"fOP = None\n",
"\n",
"folderName = 'codependencyConstraint'\n",
"subFolderName = \"Mand_Sugg_Normal\"\n",
"shellFileSuffix = 'codepConst_MSN_Validator'\n",
"graph_cache_file_prefix = \"cache_new_11_\"\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(\"../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv\")):\n",
" continue\n",
" \n",
" commandInit = \"{ time ( kgtk --debug query -i ../../propertiesSplit_WRemoved_Final/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(\"../../propertiesSplit_WRemoved_Final/claims.\"+ prop2 +\".tsv\")):\n",
" print(f\"File: ../../propertiesSplit_WRemoved_Final/claims.{prop2}.tsv does not exist\")\n",
" continue\n",
" \n",
" commandOtherFiles += \"../../propertiesSplit_WRemoved_Final/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 % 60 == 0:\n",
" if fOP:\n",
" fOP.close()\n",
" fCnt += 1\n",
" fOP = open(\"../../propertiesSplit_WRemoved_Final/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 ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit_WRemoved_Final/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 ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk cat -i ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit_WRemoved_Final/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": 12,
"id": "peripheral-herald",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"534"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cnt"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "incorporated-logistics",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"9"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fCnt"
]
},
{
"cell_type": "code",
"execution_count": 54,
"id": "optimum-blowing",
"metadata": {},
"outputs": [],
"source": [
"# import os\n",
"# for i in range(1,28):\n",
"# os.system(\"screen -dm sh ../../propertiesSplit_WRemoved_Final/checkViolations/codepConst_MSN_Validator\"+str(i)+\".sh\")"
]
},
{
"cell_type": "markdown",
"id": "indoor-verse",
"metadata": {},
"source": [
"#### Version 2 - Mandatory + Normal"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "furnished-paradise",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"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: ../../propertiesSplit_WRemoved_Final/claims.P345.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P2604.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1566.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P2355.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1014.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P2636.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1771.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P2755.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P8326.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1627.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P954.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P498.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1297.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P8680.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P715.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P2606.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P8303.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/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",
"fOP = None\n",
"\n",
"folderName = 'codependencyConstraint'\n",
"subFolderName = \"Mand_Normal\"\n",
"shellFileSuffix = 'codepConst_MN_Validator'\n",
"graph_cache_file_prefix = \"cache_new_22_\"\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(\"../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv\")):\n",
" continue\n",
" \n",
" commandInit = \"{ time ( kgtk --debug query -i ../../propertiesSplit_WRemoved_Final/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(\"../../propertiesSplit_WRemoved_Final/claims.\"+ prop2 +\".tsv\")):\n",
" print(f\"File: ../../propertiesSplit_WRemoved_Final/claims.{prop2}.tsv does not exist\")\n",
" continue\n",
" \n",
" commandOtherFiles += \"../../propertiesSplit_WRemoved_Final/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 % 60 == 0:\n",
" if fOP:\n",
" fOP.close()\n",
" fCnt += 1\n",
" fOP = open(\"../../propertiesSplit_WRemoved_Final/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 ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit_WRemoved_Final/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 ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk cat -i ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit_WRemoved_Final/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": 16,
"id": "searching-individual",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"475"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cnt"
]
},
{
"cell_type": "code",
"execution_count": 55,
"id": "silver-clarity",
"metadata": {},
"outputs": [],
"source": [
"# import os\n",
"# for i in range(1,25):\n",
"# os.system(\"screen -dm sh ../../propertiesSplit_WRemoved_Final/checkViolations/codepConst_MN_Validator\"+str(i)+\".sh\")"
]
},
{
"cell_type": "markdown",
"id": "prescription-access",
"metadata": {},
"source": [
"#### Version 3 - Mandatory"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "married-porter",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"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: ../../propertiesSplit_WRemoved_Final/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'\n",
"subFolderName = \"Mand\"\n",
"shellFileSuffix = 'codepConst_M_Validator'\n",
"graph_cache_file_prefix = \"cache_33_new_\"\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(\"../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv\")):\n",
" continue\n",
" \n",
" commandInit = \"{ time ( kgtk --debug query -i ../../propertiesSplit_WRemoved_Final/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(\"../../propertiesSplit_WRemoved_Final/claims.\"+ prop2 +\".tsv\")):\n",
" print(f\"File: ../../propertiesSplit_WRemoved_Final/claims.{prop2}.tsv does not exist\")\n",
" continue\n",
" \n",
" commandOtherFiles += \"../../propertiesSplit_WRemoved_Final/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 % 60 == 0:\n",
" if fOP:\n",
" fOP.close()\n",
" fCnt += 1\n",
" fOP = open(\"../../propertiesSplit_WRemoved_Final/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 ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit_WRemoved_Final/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 ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk cat -i ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit_WRemoved_Final/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": 18,
"id": "according-blackberry",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"79"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cnt"
]
},
{
"cell_type": "code",
"execution_count": 56,
"id": "extraordinary-drawing",
"metadata": {},
"outputs": [],
"source": [
"# import os\n",
"# for i in range(1,5):\n",
"# os.system(\"screen -dm sh ../../propertiesSplit_WRemoved_Final/checkViolations/codepConst_M_Validator\"+str(i)+\".sh\")"
]
},
{
"cell_type": "markdown",
"id": "subsequent-brown",
"metadata": {},
"source": [
"#### Version 4 - Normal"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "operational-migration",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"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: ../../propertiesSplit_WRemoved_Final/claims.P345.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P2604.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1566.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P2355.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1014.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P2636.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1771.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P2755.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P8326.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P954.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P498.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1297.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P8680.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P715.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P2606.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P8303.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/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",
"fOP = None\n",
"\n",
"folderName = 'codependencyConstraint'\n",
"subFolderName = \"Normal\"\n",
"shellFileSuffix = 'codepConst_N_Validator'\n",
"graph_cache_file_prefix = \"cache_44_new_\"\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(\"../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv\")):\n",
" continue\n",
" \n",
" commandInit = \"{ time ( kgtk --debug query -i ../../propertiesSplit_WRemoved_Final/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(\"../../propertiesSplit_WRemoved_Final/claims.\"+ prop2 +\".tsv\")):\n",
" print(f\"File: ../../propertiesSplit_WRemoved_Final/claims.{prop2}.tsv does not exist\")\n",
" continue\n",
" \n",
" commandOtherFiles += \"../../propertiesSplit_WRemoved_Final/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 % 60 == 0:\n",
" if fOP:\n",
" fOP.close()\n",
" fCnt += 1\n",
" fOP = open(\"../../propertiesSplit_WRemoved_Final/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 ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit_WRemoved_Final/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 ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv\\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk cat -i ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit_WRemoved_Final/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": 22,
"id": "harmful-binary",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"424"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cnt"
]
},
{
"cell_type": "code",
"execution_count": 57,
"id": "advance-married",
"metadata": {},
"outputs": [],
"source": [
"# import os\n",
"# for i in range(1,23):\n",
"# os.system(\"screen -dm sh ../../propertiesSplit_WRemoved_Final/checkViolations/codepConst_N_Validator\"+str(i)+\".sh\")"
]
},
{
"cell_type": "markdown",
"id": "ranging-journal",
"metadata": {},
"source": [
"#### Version 5 - Suggestion"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "missing-jordan",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"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: ../../propertiesSplit_WRemoved_Final/claims.P1566.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P3350.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/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'\n",
"subFolderName = \"Suggestion\"\n",
"shellFileSuffix = 'codepConst_S_Validator'\n",
"graph_cache_file_prefix = \"codep_new_66_1_\"\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(\"../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv\")):\n",
" continue\n",
" \n",
" commandInit = \"{ time ( kgtk --debug query -i ../../propertiesSplit_WRemoved_Final/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(\"../../propertiesSplit_WRemoved_Final/claims.\"+ prop2 +\".tsv\")):\n",
" print(f\"File: ../../propertiesSplit_WRemoved_Final/claims.{prop2}.tsv does not exist\")\n",
" continue\n",
" \n",
" commandOtherFiles += \"../../propertiesSplit_WRemoved_Final/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 % 60 == 0:\n",
" if fOP:\n",
" fOP.close()\n",
" fCnt += 1\n",
" fOP = open(\"../../propertiesSplit_WRemoved_Final/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 ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit_WRemoved_Final/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 ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk cat -i ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit_WRemoved_Final/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": 24,
"id": "soviet-forth",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"97"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cnt"
]
},
{
"cell_type": "code",
"execution_count": 58,
"id": "racial-stationery",
"metadata": {},
"outputs": [],
"source": [
"# import os\n",
"# for i in range(1,6):\n",
"# os.system(\"screen -dm sh ../../propertiesSplit_WRemoved_Final/checkViolations/codepConst_S_Validator\"+str(i)+\".sh\")"
]
},
{
"cell_type": "markdown",
"id": "homeless-pleasure",
"metadata": {},
"source": [
"### Analyze Violations"
]
},
{
"cell_type": "code",
"execution_count": 68,
"id": "welcome-dependence",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "e25b0c210ce141f3bf78f3aa51ff00d9",
"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": "7baebc8398064eb59bcf717d236bc684",
"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": "4fa820d0b34246829561cc1ec27f8e36",
"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": "5f3a52e566b942af9f4f54040dd3e063",
"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": "d99d2ef714d34848a269bc0040f97ef0",
"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": "048a1be4ccd9475b84f3597f3e324e41",
"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 = \"../../allConstraintsAnalysis_WRemoved_Final/codependencyConstraint/\"+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": 69,
"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": 70,
"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": 71,
"id": "physical-soviet",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'Mand_Sugg_Normal': {'correct': 308616510,\n",
" 'incorrect': 4841535,\n",
" 'propCount': 534,\n",
" 'total': 313458045,\n",
" 'percIncorrect': 1.5445559867509542},\n",
" 'Mand_Normal': {'correct': 278310708,\n",
" 'incorrect': 2445456,\n",
" 'propCount': 475,\n",
" 'total': 280756164,\n",
" 'percIncorrect': 0.871024865548455},\n",
" 'Mand': {'correct': 5257741,\n",
" 'incorrect': 5434,\n",
" 'propCount': 79,\n",
" 'total': 5263175,\n",
" 'percIncorrect': 0.10324566445159053},\n",
" 'Normal': {'correct': 277367943,\n",
" 'incorrect': 2440290,\n",
" 'propCount': 424,\n",
" 'total': 279808233,\n",
" 'percIncorrect': 0.8721294487428467},\n",
" 'Suggestion': {'correct': 31544215,\n",
" 'incorrect': 2430724,\n",
" 'propCount': 97,\n",
" 'total': 33974939,\n",
" 'percIncorrect': 7.154461704846622}}"
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"codepConstViolationsSummary"
]
},
{
"cell_type": "code",
"execution_count": 72,
"id": "permanent-triumph",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "4b1469c77f5d4e0e9af565568f37fe1d",
"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: ../../propertiesSplit_WRemoved_Final/claims.P345.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P2604.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1566.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1566.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P2355.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P3350.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1014.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P2636.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1771.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P2755.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P8326.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P5128.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1627.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P954.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P498.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1297.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P8680.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P715.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P2606.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P8303.tsv does not exist\n",
"File: ../../propertiesSplit_WRemoved_Final/claims.P1874.tsv does not exist\n"
]
}
],
"source": [
"mandatoryPropCount = 0\n",
"suggestionPropCount = 0\n",
"normalPropCount = 0\n",
"for prop in tqdm(dfItemRequires.index.unique()):\n",
" if not(os.path.isfile(\"../../propertiesSplit_WRemoved_Final/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(\"../../propertiesSplit_WRemoved_Final/claims.\"+ prop2 +\".tsv\")):\n",
" print(f\"File: ../../propertiesSplit_WRemoved_Final/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": 73,
"id": "boring-tooth",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"No. of props having at least 1 mandatory constraint: 77\n",
"No. of props having at least 1 suggestion constraint: 95\n",
"No. of props having at least 1 normal constraint: 414\n"
]
}
],
"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": 74,
"id": "beautiful-xerox",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"codepConstDF1 = pd.DataFrame(codepConstViolations['Mand_Sugg_Normal']).T"
]
},
{
"cell_type": "code",
"execution_count": 75,
"id": "genetic-venezuela",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" \n",
" \n",
" \n",
" \n",
" P1018 \n",
" 186 \n",
" 16 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P1456 \n",
" 18648 \n",
" 37 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P19 \n",
" 2782222 \n",
" 28453 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P2312 \n",
" 0 \n",
" 5 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P2860 \n",
" 174842113 \n",
" 152425 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" P4091 \n",
" 1487 \n",
" 1 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P410 \n",
" 138058 \n",
" 813 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P411 \n",
" 6304 \n",
" 6866 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P412 \n",
" 20465 \n",
" 13806 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P413 \n",
" 389145 \n",
" 35536 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
"
\n",
"
534 rows × 3 columns
\n",
"
"
],
"text/plain": [
" correct incorrect paths\n",
"P1018 186 16 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P1456 18648 37 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P19 2782222 28453 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P2312 0 5 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P2860 174842113 152425 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"... ... ... ...\n",
"P4091 1487 1 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P410 138058 813 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P411 6304 6866 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P412 20465 13806 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P413 389145 35536 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"\n",
"[534 rows x 3 columns]"
]
},
"execution_count": 75,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"codepConstDF1"
]
},
{
"cell_type": "code",
"execution_count": 76,
"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": 77,
"id": "chinese-pressing",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" violation_ratio \n",
" \n",
" \n",
" \n",
" \n",
" P2302 \n",
" 0 \n",
" 48022 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P3063 \n",
" 0 \n",
" 1252 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P2309 \n",
" 0 \n",
" 55 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P2308 \n",
" 0 \n",
" 51 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P5447 \n",
" 0 \n",
" 24 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P5448 \n",
" 0 \n",
" 23 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P7569 \n",
" 0 \n",
" 9 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P7903 \n",
" 0 \n",
" 7 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P2312 \n",
" 0 \n",
" 5 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P2313 \n",
" 0 \n",
" 4 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P2310 \n",
" 0 \n",
" 4 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P2311 \n",
" 0 \n",
" 4 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P4680 \n",
" 0 \n",
" 2 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P2307 \n",
" 0 \n",
" 2 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P2916 \n",
" 0 \n",
" 2 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P2302 0 48022 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P3063 0 1252 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2309 0 55 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2308 0 51 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P5447 0 24 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P5448 0 23 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P7569 0 9 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P7903 0 7 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2312 0 5 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2313 0 4 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2310 0 4 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2311 0 4 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P4680 0 2 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2307 0 2 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2916 0 2 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"\n",
" violation_ratio \n",
"P2302 1.0 \n",
"P3063 1.0 \n",
"P2309 1.0 \n",
"P2308 1.0 \n",
"P5447 1.0 \n",
"P5448 1.0 \n",
"P7569 1.0 \n",
"P7903 1.0 \n",
"P2312 1.0 \n",
"P2313 1.0 \n",
"P2310 1.0 \n",
"P2311 1.0 \n",
"P4680 1.0 \n",
"P2307 1.0 \n",
"P2916 1.0 "
]
},
"execution_count": 77,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"codepConstDF1.sort_values(by=['violation_ratio', 'incorrect'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": 80,
"id": "demonstrated-debut",
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" violation_ratio \n",
" \n",
" \n",
" \n",
" \n",
" P734 \n",
" 2119055 \n",
" 738534 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.258447 \n",
" \n",
" \n",
" P2214 \n",
" 2989348 \n",
" 721476 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.194425 \n",
" \n",
" \n",
" P433 \n",
" 31113458 \n",
" 436995 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.013851 \n",
" \n",
" \n",
" P195 \n",
" 1150231 \n",
" 401686 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.258832 \n",
" \n",
" \n",
" P569 \n",
" 6926852 \n",
" 267556 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.037189 \n",
" \n",
" \n",
" P131 \n",
" 11274319 \n",
" 200519 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.017475 \n",
" \n",
" \n",
" P275 \n",
" 7295 \n",
" 163856 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.957377 \n",
" \n",
" \n",
" P2860 \n",
" 174842113 \n",
" 152425 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.000871 \n",
" \n",
" \n",
" P570 \n",
" 3471930 \n",
" 105652 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.029532 \n",
" \n",
" \n",
" P2017 \n",
" 86770 \n",
" 101977 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.540284 \n",
" \n",
" \n",
" P1435 \n",
" 2121637 \n",
" 92401 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.041734 \n",
" \n",
" \n",
" P1922 \n",
" 30636 \n",
" 64256 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.677149 \n",
" \n",
" \n",
" P4765 \n",
" 37950 \n",
" 63425 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.625647 \n",
" \n",
" \n",
" P708 \n",
" 45718 \n",
" 57276 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.556110 \n",
" \n",
" \n",
" P197 \n",
" 122018 \n",
" 52917 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.302495 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P734 2119055 738534 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2214 2989348 721476 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P433 31113458 436995 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P195 1150231 401686 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P569 6926852 267556 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P131 11274319 200519 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P275 7295 163856 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2860 174842113 152425 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P570 3471930 105652 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2017 86770 101977 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P1435 2121637 92401 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P1922 30636 64256 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P4765 37950 63425 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P708 45718 57276 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P197 122018 52917 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"\n",
" violation_ratio \n",
"P734 0.258447 \n",
"P2214 0.194425 \n",
"P433 0.013851 \n",
"P195 0.258832 \n",
"P569 0.037189 \n",
"P131 0.017475 \n",
"P275 0.957377 \n",
"P2860 0.000871 \n",
"P570 0.029532 \n",
"P2017 0.540284 \n",
"P1435 0.041734 \n",
"P1922 0.677149 \n",
"P4765 0.625647 \n",
"P708 0.556110 \n",
"P197 0.302495 "
]
},
"execution_count": 80,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"codepConstDF1.sort_values(by=['incorrect'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": 81,
"id": "developed-zimbabwe",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"count 534.000000\n",
"mean 0.212037\n",
"std 0.306183\n",
"min 0.000000\n",
"25% 0.001654\n",
"50% 0.040424\n",
"75% 0.329546\n",
"max 1.000000\n",
"Name: violation_ratio, dtype: float64"
]
},
"execution_count": 81,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"codepConstDF1['violation_ratio'].describe()"
]
},
{
"cell_type": "code",
"execution_count": 82,
"id": "unknown-johnston",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Co-Dependency Constraint - Version 1 - Violation Ratios')"
]
},
"execution_count": 82,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEICAYAAACwDehOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAfbUlEQVR4nO3deZgdVZ3/8fcHArKGxbQMAiGAAQV1AFvEBUEBWRSCoyAoq0hAZUZ/+FORcZTHZYZREXUEMQgDuCAIAzICKiKIC4hBI4RNAgZJCKRl3wSB7/xxzi0qN/d2V3ffe6uXz+t57tNVp7bvqVu3vnVqa0UEZmZmACvUHYCZmY0dTgpmZlZwUjAzs4KTgpmZFZwUzMys4KRgZmYFJ4VxTNIMSSFpSt2xjHeS3iPpp3XH0WkTpV6SjpP0rYrjLpS0ywiXs4Ok20Yyba9JuknSTp2e74RICpLeLWmupMckLZF0maQ3jHBeZ0p6WtKj+TNf0n9IWqvTcU9EkqZK+oqkv+Tv447cP62LyzxT0udGM4+I+G5EvKXi8g6V9KuRLkvS/nnHpabyKZKWSnrbSOfdbDj1Gg5JK0s6P9cjRrNzqrI+IuLfI+J9o427xbJD0ksa/RHxy4jYogvLaRzAPZY/CyUdO4zpl9vGI2KriLiq07GO+6Qg6RjgK8C/A+sB04FTgFmjmO0XImJNoA84DNge+LWk1UcX7cQmaWXgCmArYHdgKvBa4H5guxrjGmstqYuAtYEdm8p3BwL4cdUZKanrd/wr4EDg3lHO5yI6tD7GgbUjYg3gncC/Sdq17oCWExHj9gOsBTwG7DvIOC8gJY178ucrwAsGGf9M4HNNZWsCS4CjS2XvBW4BHgR+AmxcGhbAvwB3An8FvgisMIxpjwJuBx4CTgaUh60IfCnP807gg3n8KaX1cXqOdTHwOWDFPOxQ0o/4S3m5fwb2KC13XeC/8zp6ELgol88H9iqNt1Je/jYt1t37gPuANQZZvy8Drsp1uwnYu2ndnwxcAjwK/BbYLA8TcBKwFHgEuBF4OTAb+DvwdN4W/jePvxD4OHAD8BQwBTgWuCPP+2bg7aVlHwr8aqjvIcf/N+DZvLyHRrjtzgHOaCo7Dzgpd28P/CYv+4/ATqXxrgI+D/waeBJ4SY7/zly3PwPvaVOv1wG/Ax7Of1/XNN/P5vk+CvwUmFahLovK8XVpfRwPfKc0bO+8/TyU435ZadhCYJfcvR1wTR5vCfB1YOU87Or8PT+ev8t3ATsBi0a7vbao3wxKv9Vcdh3w0VL/D0gJ9uEc21a5fLBtvFHPtvs5YBrwo1yHB4BfUtofLRfraL7Iuj+kI4lnyiu6xTifAa4FXkQ68v8N8NlBxj+TpqSQy88Gzs3ds4AFeYOZAnwS+E1p3ACuJO1opwN/At43jGl/RDpymg4MALvnYUcBtwIb5XlfybJJ4ULgm8Dqub7XAUfmYYfmDesIUnJ5f954GgnnEuBcYB3Sjn/HXP6xRr1L8d/YZt19HzhrkHW7Uq77ccDKwJtJP6YtSuu+0aqYAnwX+H4ethtwfV4vjZ3z+u2+M9IPZl5eV6vmsn2BF5NayO8i7QzWL62f5qTQ7ntYZtwRbruvJyW3RmxrkXbwWwMb5PWwZ45119zfl8e9CvgLqUU2JU/7SGk9rs/zO5Qi1rzNPAgclKc7IPe/sDTfO4DNgVVz/wkV6tKJpNB2feT+48lJIcf3eF4vK5G20QU8v7NfyPM7y1eREuwU0o75FuDDTd/zS0r9O5GTAqPYXlvUbwbL/la3B55g2QOT95IOQBs7+HmD7Zea6tl2Pwf8B3Bqrs9KwA7k333LWEfzRdb9Ad4D3DvEOHcAe5b6dwMWDjL+cis/l58AXJ67LwMOLw1bIX/BG5c2tN1Lwz8AXDGMad9QGn4ecGzu/jlwVGnYWxobGunU2VPkH1UefgBwZe4+FFhQGrZanvYfSDuR54B1WtT7xfmHMDX3nw98rM26u5xBdiJ5Y7yXZVtN5wDHl9b9t0rD9gRuzd1vJiXX7Wk6yhnkB/PeIbaNecCs0vppTgrtvodlxh3F9ns78O7cfQTwx9z9ceDbTeP+BDgkd18FfKY0bHXSUeA7yt9/c6ykZHBd0/BrgENL8/1k03b74wr1GHVSGGx95P7jeT4p/BtwXtNvaHEjBko7yxbL+DBwYdP33C4pjHh7bbHcGXlZD5GSXZBa7S13zqSDkQDWGmIbbySFtvs5UsL4Ybmeg33G+zWF+4FpQ5wzfjFwV6n/rlzWuKOhceHn1CGWtQGp6QWwMfBVSQ9JeiiXK4/TcHerZVactnyO9glgjVJdmufbsDHpKGBJad7fJB05LDffiHgid65BOpp+ICIebK50RNxDOp3wDklrA3uQjohauZ+UYNp5MXB3RDzXVIch6x4RPyc1/U8GlkqaI2nqIMuCZdcVkg6WNK+0fl5Oalq30+57GFS+g6WxXd00yKhnAwfn7oNyP6Tvct9GnDnWN7Dsui3qFhGPk1o+R5G+/0skvbTF8pp/C1Bx/Y9GB9ZHs2Xqkbenu1m2Ho1lby7pR5LulfQI6dpj1ZseRry9DmJaHucjpAS0Uo5zRUkn5BszHiHt8BvjV4215X6OdPp6AfBTSXcOdYF7vCeFa0hHx/sMMs49pB9Zw/RcRqQ7GtbIn6PazUDSGsAupHNxkDbAIyNi7dJn1Yj4TWmyjVots+K07SxpMd+Gu0nrYlppvlMjYqsK870bWDfv9Fs5i3RBcV/gmohY3Ga8nwG7DXJB/h5go6YLo9NJR3lDioivRcSrgC1JpxA+2hjUbpJGh6SNgdOAo0mnS9YmXS9R60kHD2WIOH9Z2q4GW//fBnaW9FpSC6iRbO8mtRTK28jqEXFCuxgi4icRsSspcdxKqmuz5t8CDGP9j1QH1kezZeqR71raiNb1+AZpfcyMiKmkU0FVv/NRba/tRMSzEfFl0rWpD+Tid5NOze5COnU2I5c3Yh10m2Pw/dyjEfGRiNiUdC3mGEk7t5vRuE4KEfEw8CngZEn7SFpN0kqS9pD0hTzaOcAnJfXl2yI/BXynyvwlvUDSq0h3RzxIuhAL6fzcJyRtlcdbS9K+TZN/VNI6kjYCPkQ6X1912nbOA/5F0oaS1iFdOG2siyWkC4Mn5ttCV5C0maQdh5ppnvYy4JQc80qS3lga5SJg21yPdkdvkH7UdwMXSHppjuGFuUW2J+lC3BPAx/IydgL2Il2LGJSkV0t6jaSVSOeT/0Y65QXp4vamQ8xiddIPayDP7zBSS2Ek7gM2zHdbjVhELCRd/D+HdGqycdT5HWAvSbvlI8hVJO0kacNW85G0nqRZORk/RboY+VyLUS8FNle6hXuKpHeREuyPRhJ//n2skntXznGOJMkCg66PZucBb5W0c94ePkKqd6sDqzVJ1yoey62n9zcNH2zbGfH2WtEJed6r5DifIrW2VyO1aKrGCYPs5yS9TdJL8nfzMOkmiVbbBzDOkwJARJwIHEO6YDtA2ikdTdqRQboDZy7pLpQbgd/nssF8TNKjpC/obNIFztflZjoRcSHwn8D3c1NvPum0StkP83TzSBdxTx/GtO2cRjq3/Mdcj/9pGn4w6YLYzaQkdj6Dn84pO4h0IfpW0h0+H24MiIgngQuATVosk9J4T5GOdG4lXV94hHSxexrw24h4mvSj2oN0B9MpwMERcWuF+KaS6v8gqWl8P6lZDGndbplPtVzUJrabgRNJrcv7gFeQTouNxM9Jd6LcK+mvI5xHw1mkI7wi2UbE3aSjxuN4fpv+KO1/ryuQfgP3kE5H7sjyOz8i4n7gbaSd6P2kC7Rvi4iR1uE20vnxDUjb5ZMs3xIZruXWR7OIuI3Ucv0v0na0F+kOuadbjP7/SUfhj5K2n3Obhh8PnJW3nf2aljOa7bWKS0jb8xGk+t5FaoXcTLpoXDbUNj7Yfm4mqRX/GGn7PyUirmwXVOPOE+sgSUFqri6oO5ZOkfQpYPOIOLDuWMyse8baQz02BklaFzic1Jowswls3J8+su6SdATp9MVlEXF13fGYWXf59JGZmRW61lKQtJGkKyXdrPQ2vw/l8nUlXS7p9vx3nVwuSV+TtEDSDZK27VZsZmbWWtdaCpLWJ71C4PeS1iTdibMP6QnLByLihPwQxToR8fF8y+I/k54KfA3w1Yh4zWDLmDZtWsyYMaMr8ZuZTVTXX3/9XyOir9Wwrl1ozve+L8ndj0q6hXTr2izSk3yQbj+7ivRY/yzg7EhZ6lpJa0taP8+npRkzZjB37txuVcHMbEKS1Pxke6EnF5olzQC2IT0Msl5pR38v6Z09kBJG+bUEi2j92Ppspf+dMHdgYKB7QZuZTUJdTwr5FREXkN5M+Eh5WG4VDOv8VUTMiYj+iOjv62vZ+jEzsxHqalLIj6BfAHw3IhpPwt6Xrzc0rjsszeWLWfa9PhvS5XeymJnZsrp595FIj2bfkl/+1HAxcEjuPoT0OohG+cH5LqTtgYcHu55gZmad180nml9PegL2RknzctlxpJdAnSfpcNK7PhrvG7mUdOfRAtJLqA7rYmxmZtZCN+8++hXtX1G73Gtb8/WFD3YrHjMzG5pfc2FmZgUnBTMzKzgpmJlZYVK/OnvGsZcU3QtPeGuNkZiZjQ1uKZiZWcFJwczMCk4KZmZWcFIwM7OCk4KZmRWcFMzMrOCkYGZmBScFMzMrOCmYmVnBScHMzApOCmZmVnBSMDOzgpOCmZkVnBTMzKzQtaQg6QxJSyXNL5WdK2le/ixs/O9mSTMkPVkadmq34jIzs/a6+f8UzgS+DpzdKIiIdzW6JZ0IPFwa/46I2LqL8ZiZ2RC6lhQi4mpJM1oNkyRgP+DN3Vq+mZkNX13XFHYA7ouI20tlm0j6g6RfSNqh3YSSZkuaK2nuwMBA9yM1M5tE6koKBwDnlPqXANMjYhvgGOB7kqa2mjAi5kREf0T09/X19SBUM7PJo+dJQdIU4J+AcxtlEfFURNyfu68H7gA273VsZmaTXR0thV2AWyNiUaNAUp+kFXP3psBM4M4aYjMzm9S6eUvqOcA1wBaSFkk6PA/an2VPHQG8Ebgh36J6PnBURDzQrdjMzKy1bt59dECb8kNblF0AXNCtWMzMrBo/0WxmZgUnBTMzKzgpmJlZwUnBzMwKTgpmZlZwUjAzs4KTgpmZFZwUzMys4KRgZmYFJwUzMys4KZiZWcFJwczMCk4KZmZWcFIwM7OCk4KZmRWcFMzMrOCkYGZmBScFMzMrdPN/NJ8haamk+aWy4yUtljQvf/YsDfuEpAWSbpO0W7fiMjOz9rrZUjgT2L1F+UkRsXX+XAogaUtgf2CrPM0pklbsYmxmZtZC15JCRFwNPFBx9FnA9yPiqYj4M7AA2K5bsZmZWWt1XFM4WtIN+fTSOrlsA+Du0jiLctlyJM2WNFfS3IGBgW7HamY2qfQ6KXwD2AzYGlgCnDjcGUTEnIjoj4j+vr6+DodnZja59TQpRMR9EfFsRDwHnMbzp4gWAxuVRt0wl5mZWQ/1NClIWr/U+3agcWfSxcD+kl4gaRNgJnBdL2MzMzOY0q0ZSzoH2AmYJmkR8GlgJ0lbAwEsBI4EiIibJJ0H3Aw8A3wwIp7tVmxmZtZa15JCRBzQovj0Qcb/PPD5bsVjZmZD8xPNZmZWcFIwM7OCk4KZmRWcFMzMrOCkYGZmBScFMzMrOCmYmVnBScHMzApOCmZmVnBSMDOzgpOCmZkVnBTMzKzgpGBmZgUnBTMzKzgpmJlZwUnBzMwKTgpmZlZwUjAzs0LXkoKkMyQtlTS/VPZFSbdKukHShZLWzuUzJD0paV7+nNqtuMzMrL1uthTOBHZvKrsceHlEvBL4E/CJ0rA7ImLr/Dmqi3GZmVkbXUsKEXE18EBT2U8j4pncey2wYbeWb2Zmw1fnNYX3ApeV+jeR9AdJv5C0Q7uJJM2WNFfS3IGBge5HaWY2idSSFCT9K/AM8N1ctASYHhHbAMcA35M0tdW0ETEnIvojor+vr683AZuZTRI9TwqSDgXeBrwnIgIgIp6KiPtz9/XAHcDmvY7NzGyyq5QUJL2iEwuTtDvwMWDviHiiVN4nacXcvSkwE7izE8s0M7PqqrYUTpF0naQPSFqrygSSzgGuAbaQtEjS4cDXgTWBy5tuPX0jcIOkecD5wFER8UCr+ZqZWfdMqTJSROwgaSbp4vD1kq4D/jsiLh9kmgNaFJ/eZtwLgAuqxGJmZt1T+ZpCRNwOfBL4OLAj8LX8INo/dSs4MzPrrarXFF4p6STgFuDNwF4R8bLcfVIX4zMzsx6qdPoI+C/gW8BxEfFkozAi7pH0ya5EZmZmPVc1KbwVeDIingWQtAKwSkQ8ERHf7lp0ZmbWU1WvKfwMWLXUv1ouMzOzCaRqUlglIh5r9OTu1boTkpmZ1aVqUnhc0raNHkmvAp4cZHwzMxuHql5T+DDwA0n3AAL+AXhXt4IyM7N6VH147XeSXgpskYtui4i/dy8sMzOrQ9WWAsCrgRl5mm0lERFndyUqMzOrRaWkIOnbwGbAPODZXByAk4KZ2QRStaXQD2zZeNW1mZlNTFXvPppPurhsZmYTWNWWwjTg5vx21KcahRGxd1eiMjOzWlRNCsd3MwgzMxsbqt6S+gtJGwMzI+JnklYDVuxuaGZm1mtVX519BOk/on0zF20AXNSlmMzMrCZVLzR/EHg98AgU/3DnRd0KyszM6lE1KTwVEU83eiRNIT2nMChJZ0haKml+qWxdSZdLuj3/XSeXS9LXJC2QdEP5XUtmZtYbVZPCLyQdB6wqaVfgB8D/VpjuTGD3prJjgSsiYiZwRe4H2AOYmT+zgW9UjM3MzDqkalI4FhgAbgSOBC4l/b/mQUXE1cADTcWzgLNy91nAPqXysyO5Flhb0voV4zMzsw6oevfRc8Bp+TNa60XEktx9L7Be7t4AuLs03qJctqRUhqTZpJYE06dP70A4ZmbWUPXdR3+mxTWEiNh0NAuPiJA0rFdnRMQcYA5Af3+/X7thZtZBw3n3UcMqwL7AuiNc5n2S1o+IJfn00NJcvhjYqDTehrnMzMx6pNI1hYi4v/RZHBFfAd46wmVeDBySuw8BflgqPzjfhbQ98HDpNJOZmfVA1dNH5dtDVyC1HIacVtI5wE7ANEmLgE8DJwDnSTocuAvYL49+KbAnsAB4AjisWhXMzKxTqp4+OrHU/QywkOd35m1FxAFtBu3cYtwgPSRnZmY1qXr30Zu6HYiZmdWv6umjYwYbHhFf7kw4ZmZWp+HcffRq0sVggL2A64DbuxGUmZnVo2pS2BDYNiIeBZB0PHBJRBzYrcDMzKz3qr7mYj3g6VL/0zz/JLKZmU0QVVsKZwPXSbow9+/D8+8vMjOzCaLq3Uefl3QZsEMuOiwi/tC9sMzMrA5VTx8BrAY8EhFfBRZJ2qRLMZmZWU2q/jvOTwMfBz6Ri1YCvtOtoMzMrB5VWwpvB/YGHgeIiHuANbsVlJmZ1aNqUng6v4YiACSt3r2QzMysLlWTwnmSvkn6b2hHAD+jM/9wx8zMxpAqbzoVcC7wUuARYAvgUxFxeZdjMzOzHhsyKeT/jnZpRLwCcCIwM5vAqp4++r2kV3c1EjMzq13VJ5pfAxwoaSHpDiSRGhGv7FZgZmbWe4MmBUnTI+IvwG49isfMzGo0VEvhItLbUe+SdEFEvKMHMZmZWU2GSgoqdW/aiQVK2oJ0N1N5vp8C1gaOAAZy+XERcWknlmlmZtUMlRSiTfeIRcRtwNYAklYEFgMXAocBJ0XElzqxHDMzG76hksI/SnqE1GJYNXfD8xeap45y+TsDd+TTU6OclZmZjdagt6RGxIoRMTUi1oyIKbm70T/ahACwP3BOqf9oSTdIOkPSOq0mkDRb0lxJcwcGBlqNYmZmIzScV2d3lKSVSS/Z+0Eu+gawGenU0hLgxFbTRcSciOiPiP6+vr5ehGpmNmnUlhSAPYDfR8R9ABFxX0Q8GxHPkd6rtF2NsZmZTUp1JoUDKJ06krR+adjbgfk9j8jMbJKr+kRzR+VXb+8KHFkq/oKkrUl3OS1sGmZmZj1QS1KIiMeBFzaVHVRHLGZm9rw6Tx+ZmdkY46RgZmYFJwUzMys4KZiZWcFJwczMCk4KZmZWcFIwM7OCk4KZmRWcFMzMrOCkYGZmBScFMzMrOCmYmVnBScHMzApOCmZmVnBSMDOzgpOCmZkVnBTMzKzgpGBmZoVa/h0ngKSFwKPAs8AzEdEvaV3gXGAG6f807xcRD9YVo5nZZFN3S+FNEbF1RPTn/mOBKyJiJnBF7jczsx6pOyk0mwWclbvPAvapLxQzs8mnzqQQwE8lXS9pdi5bLyKW5O57gfWaJ5I0W9JcSXMHBgZ6FauZ2aRQ2zUF4A0RsVjSi4DLJd1aHhgRISmaJ4qIOcAcgP7+/uWGm5nZyNXWUoiIxfnvUuBCYDvgPknrA+S/S+uKz8xsMqolKUhaXdKajW7gLcB84GLgkDzaIcAP64jPzGyyquv00XrAhZIaMXwvIn4s6XfAeZIOB+4C9qspPjOzSamWpBARdwL/2KL8fmDn3kdkZmYw9m5JNTOzGjkpmJlZwUnBzMwKTgpmZlZwUjAzs4KTgpmZFZwUzMys4KRgZmYFJwUzMys4KZiZWcFJwczMCk4KZmZWqPOf7IwpM469pOheeMJba4zEzKw+bimYmVnBScHMzApOCmZmVnBSMDOzgpOCmZkVep4UJG0k6UpJN0u6SdKHcvnxkhZLmpc/e/Y6NjOzya6OW1KfAT4SEb+XtCZwvaTL87CTIuJLNcRkZmbUkBQiYgmwJHc/KukWYINex2FmZsur9ZqCpBnANsBvc9HRkm6QdIakddpMM1vSXElzBwYGehWqmdmkUFtSkLQGcAHw4Yh4BPgGsBmwNaklcWKr6SJiTkT0R0R/X19fr8I1M5sUannNhaSVSAnhuxHxPwARcV9p+GnAj+qIDfzKCzObvOq4+0jA6cAtEfHlUvn6pdHeDszvdWxmZpNdHS2F1wMHATdKmpfLjgMOkLQ1EMBC4MgaYjMzG7N6cRajjruPfgWoxaBLex2LmZkty080m5lZwf9PYQjl5lqZL0Cb2UTkloKZmRWcFMzMrOCkYGZmBScFMzMrOCmYmVnBScHMzApOCmZmVnBSMDOzgh9eGyG/SdXMJiInhXHMicnMOs1JoYva7bS9MzezscpJoQMmy05+PNZzPMZsVicnhQ5r9wK9Ts2z1zu2btTHbKJo/n1MhAMPJ4Wa1bXDn4gb81jjVoqNR04KY9R4OkIfC4nNO93O8/qdnPycgpmZFcZcS0HS7sBXgRWBb0XECTWH1BFVjvw7Nc5oxh+t4R5ddupodKy0rIb7Hbarc13rcSTGe4uiG99HJ/V62x5TSUHSisDJwK7AIuB3ki6OiJvrjWzsq3PnP9xx6trJjXae3f4vfN04KKgyn3a3S3dSN5L/cOczFg+Qev09VDGmkgKwHbAgIu4EkPR9YBbgpNBDdW2Q7Zbb7Tu6ejGv0dStG4lgtDGM5oi6SnLt1M6/G63PwdZXlWmGu156TRFRdwwFSe8Edo+I9+X+g4DXRMTRpXFmA7Nz7xbAbaNY5DTgr6OYfryZbPUF13mycJ2HZ+OI6Gs1YKy1FIYUEXOAOZ2Yl6S5EdHfiXmNB5OtvuA6Txauc+eMtbuPFgMblfo3zGVmZtYDYy0p/A6YKWkTSSsD+wMX1xyTmdmkMaZOH0XEM5KOBn5CuiX1jIi4qYuL7MhpqHFkstUXXOfJwnXukDF1odnMzOo11k4fmZlZjZwUzMysMOGTgqTdJd0maYGkY1sMf4Gkc/Pw30qaUUOYHVWhzsdIulnSDZKukLRxHXF20lB1Lo33DkkhadzfvlilzpL2y9/1TZK+1+sYO63Ctj1d0pWS/pC37z3riLNTJJ0haamk+W2GS9LX8vq4QdK2o15oREzYD+li9R3ApsDKwB+BLZvG+QBwau7eHzi37rh7UOc3Aavl7vdPhjrn8dYErgauBfrrjrsH3/NM4A/AOrn/RXXH3YM6zwHen7u3BBbWHfco6/xGYFtgfpvhewKXAQK2B3472mVO9JZC8dqMiHgaaLw2o2wWcFbuPh/YWZJ6GGOnDVnniLgyIp7IvdeSngcZz6p8zwCfBf4T+Fsvg+uSKnU+Ajg5Ih4EiIilPY6x06rUOYCpuXst4J4extdxEXE18MAgo8wCzo7kWmBtSeuPZpkTPSlsANxd6l+Uy1qOExHPAA8DL+xJdN1Rpc5lh5OONMazIeucm9UbRcTYeMHM6FX5njcHNpf0a0nX5jcQj2dV6nw8cKCkRcClwD/3JrTaDPf3PqQx9ZyC9ZakA4F+YMe6Y+kmSSsAXwYOrTmUXptCOoW0E6k1eLWkV0TEQ3UG1WUHAGdGxImSXgt8W9LLI+K5ugMbLyZ6S6HKazOKcSRNITU57+9JdN1R6VUhknYB/hXYOyKe6lFs3TJUndcEXg5cJWkh6dzrxeP8YnOV73kRcHFE/D0i/gz8iZQkxqsqdT4cOA8gIq4BViG9OG6i6virgSZ6Uqjy2oyLgUNy9zuBn0e+gjNODVlnSdsA3yQlhPF+nhmGqHNEPBwR0yJiRkTMIF1H2Tsi5tYTbkdU2bYvIrUSkDSNdDrpzh7G2GlV6vwXYGcASS8jJYWBnkbZWxcDB+e7kLYHHo6IJaOZ4YQ+fRRtXpsh6TPA3Ii4GDid1MRcQLqgs399EY9exTp/EVgD+EG+pv6XiNi7tqBHqWKdJ5SKdf4J8BZJNwPPAh+NiHHbCq5Y548Ap0n6f6SLzoeO54M8SeeQEvu0fJ3k08BKABFxKum6yZ7AAuAJ4LBRL3Mcry8zM+uwiX76yMzMhsFJwczMCk4KZmZWcFIwM7OCk4KZmRWcFMzMrOCkYGZmhf8DCTERvgPbZg4AAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"codepConstDF1['violation_ratio'].plot.hist(bins=100).set_title(\"Co-Dependency Constraint - Version 1 - Violation Ratios\")"
]
},
{
"cell_type": "code",
"execution_count": 83,
"id": "exceptional-dakota",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Co-Dependency Constraint - Version 1 - Violation Ratios <= 0.5')"
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"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": 84,
"id": "interior-joseph",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"No. of properties whose violation ratio is greater than mean: 0/534\n"
]
}
],
"source": [
"print(f\"No. of properties whose violation ratio is greater than mean: {sum(codepConstDF1['violation_ratio'] >= 3.539484)}/{len(codepConstDF1)}\")"
]
},
{
"cell_type": "code",
"execution_count": 85,
"id": "english-difference",
"metadata": {},
"outputs": [],
"source": [
"codepConstDF1.to_csv('../../allConstraintsAnalysis_WRemoved_Final/codepConstDFAnalysis.csv')"
]
},
{
"cell_type": "markdown",
"id": "greater-genetics",
"metadata": {},
"source": [
"#### Version 2 - Mand Normal"
]
},
{
"cell_type": "code",
"execution_count": 86,
"id": "constant-chance",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"codepConstDF2 = pd.DataFrame(codepConstViolations['Mand_Normal']).T"
]
},
{
"cell_type": "code",
"execution_count": 87,
"id": "included-adjustment",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" \n",
" \n",
" \n",
" \n",
" P1018 \n",
" 186 \n",
" 16 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P1533 \n",
" 8328 \n",
" 9693 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P2009 \n",
" 1036 \n",
" 17 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P240 \n",
" 25801 \n",
" 9 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P3816 \n",
" 31 \n",
" 10 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" P3648 \n",
" 7 \n",
" 0 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P3701 \n",
" 72 \n",
" 1 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P3713 \n",
" 359 \n",
" 1 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P3744 \n",
" 377 \n",
" 1 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P3815 \n",
" 600 \n",
" 1 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
"
\n",
"
475 rows × 3 columns
\n",
"
"
],
"text/plain": [
" correct incorrect paths\n",
"P1018 186 16 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P1533 8328 9693 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P2009 1036 17 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P240 25801 9 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P3816 31 10 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"... ... ... ...\n",
"P3648 7 0 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P3701 72 1 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P3713 359 1 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P3744 377 1 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P3815 600 1 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"\n",
"[475 rows x 3 columns]"
]
},
"execution_count": 87,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"codepConstDF2"
]
},
{
"cell_type": "code",
"execution_count": 88,
"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": 89,
"id": "harmful-discipline",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" violation_ratio \n",
" \n",
" \n",
" \n",
" \n",
" P2308 \n",
" 0 \n",
" 51 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P2916 \n",
" 0 \n",
" 2 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P5448 \n",
" 0 \n",
" 23 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P5447 \n",
" 0 \n",
" 24 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P2304 \n",
" 0 \n",
" 1 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P2307 \n",
" 0 \n",
" 2 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P2309 \n",
" 0 \n",
" 55 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P4680 \n",
" 0 \n",
" 2 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P2310 \n",
" 0 \n",
" 4 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P2842 \n",
" 0 \n",
" 1 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P2311 \n",
" 0 \n",
" 4 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P2312 \n",
" 0 \n",
" 5 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P2313 \n",
" 0 \n",
" 4 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P8264 \n",
" 0 \n",
" 1 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
" P7569 \n",
" 0 \n",
" 9 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.0 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P2308 0 51 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2916 0 2 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P5448 0 23 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P5447 0 24 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2304 0 1 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2307 0 2 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2309 0 55 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P4680 0 2 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2310 0 4 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2842 0 1 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2311 0 4 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2312 0 5 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2313 0 4 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P8264 0 1 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P7569 0 9 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"\n",
" violation_ratio \n",
"P2308 1.0 \n",
"P2916 1.0 \n",
"P5448 1.0 \n",
"P5447 1.0 \n",
"P2304 1.0 \n",
"P2307 1.0 \n",
"P2309 1.0 \n",
"P4680 1.0 \n",
"P2310 1.0 \n",
"P2842 1.0 \n",
"P2311 1.0 \n",
"P2312 1.0 \n",
"P2313 1.0 \n",
"P8264 1.0 \n",
"P7569 1.0 "
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"codepConstDF2.sort_values(by=['violation_ratio'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": 90,
"id": "unlikely-chamber",
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" violation_ratio \n",
" \n",
" \n",
" \n",
" \n",
" P2214 \n",
" 2989348 \n",
" 721476 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.194425 \n",
" \n",
" \n",
" P433 \n",
" 31113458 \n",
" 436995 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.013851 \n",
" \n",
" \n",
" P275 \n",
" 7295 \n",
" 163856 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.957377 \n",
" \n",
" \n",
" P2860 \n",
" 174842113 \n",
" 152425 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.000871 \n",
" \n",
" \n",
" P1435 \n",
" 2121637 \n",
" 92401 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.041734 \n",
" \n",
" \n",
" P708 \n",
" 45718 \n",
" 57276 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.556110 \n",
" \n",
" \n",
" P197 \n",
" 122018 \n",
" 52917 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.302495 \n",
" \n",
" \n",
" P1598 \n",
" 40600 \n",
" 49329 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.548533 \n",
" \n",
" \n",
" P1111 \n",
" 1 \n",
" 46803 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.999979 \n",
" \n",
" \n",
" P856 \n",
" 1451949 \n",
" 44006 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.029417 \n",
" \n",
" \n",
" P2248 \n",
" 4025 \n",
" 41608 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.911796 \n",
" \n",
" \n",
" P2325 \n",
" 4079 \n",
" 40619 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.908743 \n",
" \n",
" \n",
" P2243 \n",
" 4035 \n",
" 36870 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.901357 \n",
" \n",
" \n",
" P2244 \n",
" 4036 \n",
" 36801 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.901168 \n",
" \n",
" \n",
" P413 \n",
" 389145 \n",
" 35536 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.083677 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P2214 2989348 721476 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P433 31113458 436995 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P275 7295 163856 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2860 174842113 152425 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P1435 2121637 92401 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P708 45718 57276 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P197 122018 52917 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P1598 40600 49329 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P1111 1 46803 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P856 1451949 44006 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2248 4025 41608 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2325 4079 40619 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2243 4035 36870 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2244 4036 36801 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P413 389145 35536 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"\n",
" violation_ratio \n",
"P2214 0.194425 \n",
"P433 0.013851 \n",
"P275 0.957377 \n",
"P2860 0.000871 \n",
"P1435 0.041734 \n",
"P708 0.556110 \n",
"P197 0.302495 \n",
"P1598 0.548533 \n",
"P1111 0.999979 \n",
"P856 0.029417 \n",
"P2248 0.911796 \n",
"P2325 0.908743 \n",
"P2243 0.901357 \n",
"P2244 0.901168 \n",
"P413 0.083677 "
]
},
"execution_count": 90,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"codepConstDF2.sort_values(by=['incorrect'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": 91,
"id": "violent-match",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"count 475.000000\n",
"mean 0.177493\n",
"std 0.289214\n",
"min 0.000000\n",
"25% 0.000966\n",
"50% 0.023847\n",
"75% 0.214528\n",
"max 1.000000\n",
"Name: violation_ratio, dtype: float64"
]
},
"execution_count": 91,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"codepConstDF2['violation_ratio'].describe()"
]
},
{
"cell_type": "code",
"execution_count": 92,
"id": "educational-thickness",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Co-Dependency Constraint - Version 2 - Violation Ratios')"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"codepConstDF2['violation_ratio'].plot.hist(bins=100).set_title(\"Co-Dependency Constraint - Version 2 - Violation Ratios\")"
]
},
{
"cell_type": "code",
"execution_count": 93,
"id": "latin-mitchell",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Co-Dependency Constraint - Version 2 - Violation Ratios <= 0.5')"
]
},
"execution_count": 93,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"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": 94,
"id": "asian-forwarding",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"No. of properties whose violation ratio is greater than mean: 0/475\n"
]
}
],
"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": 95,
"id": "consecutive-plenty",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"codepConstDF3 = pd.DataFrame(codepConstViolations['Mand']).T"
]
},
{
"cell_type": "code",
"execution_count": 96,
"id": "digital-mileage",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" \n",
" \n",
" \n",
" \n",
" P564 \n",
" 18887 \n",
" 5 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P1081 \n",
" 12693 \n",
" 0 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P5982 \n",
" 1328 \n",
" 0 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P1087 \n",
" 3774635 \n",
" 1210 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P613 \n",
" 70608 \n",
" 5 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" P5105 \n",
" 2060 \n",
" 0 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P517 \n",
" 248 \n",
" 0 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P521 \n",
" 1757 \n",
" 0 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P555 \n",
" 17395 \n",
" 2 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P5623 \n",
" 1474 \n",
" 0 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
"
\n",
"
79 rows × 3 columns
\n",
"
"
],
"text/plain": [
" correct incorrect paths\n",
"P564 18887 5 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P1081 12693 0 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P5982 1328 0 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P1087 3774635 1210 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P613 70608 5 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"... ... ... ...\n",
"P5105 2060 0 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P517 248 0 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P521 1757 0 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P555 17395 2 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P5623 1474 0 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"\n",
"[79 rows x 3 columns]"
]
},
"execution_count": 96,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"codepConstDF3"
]
},
{
"cell_type": "code",
"execution_count": 97,
"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": 98,
"id": "numerous-construction",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" violation_ratio \n",
" \n",
" \n",
" \n",
" \n",
" P5051 \n",
" 2 \n",
" 79 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 39.500000 \n",
" \n",
" \n",
" P4341 \n",
" 8 \n",
" 1 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.125000 \n",
" \n",
" \n",
" P2095 \n",
" 38 \n",
" 3 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.078947 \n",
" \n",
" \n",
" P990 \n",
" 1089 \n",
" 44 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.040404 \n",
" \n",
" \n",
" P3931 \n",
" 2316 \n",
" 68 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.029361 \n",
" \n",
" \n",
" P246 \n",
" 174 \n",
" 5 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.028736 \n",
" \n",
" \n",
" P1713 \n",
" 2935 \n",
" 79 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.026917 \n",
" \n",
" \n",
" P141 \n",
" 131232 \n",
" 3270 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.024918 \n",
" \n",
" \n",
" P1731 \n",
" 382 \n",
" 8 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.020942 \n",
" \n",
" \n",
" P2009 \n",
" 1036 \n",
" 17 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.016409 \n",
" \n",
" \n",
" P8264 \n",
" 0 \n",
" 1 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.010000 \n",
" \n",
" \n",
" P2842 \n",
" 0 \n",
" 1 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.010000 \n",
" \n",
" \n",
" P1560 \n",
" 3459 \n",
" 33 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.009540 \n",
" \n",
" \n",
" P1635 \n",
" 922 \n",
" 8 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.008677 \n",
" \n",
" \n",
" P944 \n",
" 851 \n",
" 7 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.008226 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P5051 2 79 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P4341 8 1 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2095 38 3 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P990 1089 44 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P3931 2316 68 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P246 174 5 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P1713 2935 79 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P141 131232 3270 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P1731 382 8 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2009 1036 17 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P8264 0 1 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2842 0 1 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P1560 3459 33 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P1635 922 8 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P944 851 7 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"\n",
" violation_ratio \n",
"P5051 39.500000 \n",
"P4341 0.125000 \n",
"P2095 0.078947 \n",
"P990 0.040404 \n",
"P3931 0.029361 \n",
"P246 0.028736 \n",
"P1713 0.026917 \n",
"P141 0.024918 \n",
"P1731 0.020942 \n",
"P2009 0.016409 \n",
"P8264 0.010000 \n",
"P2842 0.010000 \n",
"P1560 0.009540 \n",
"P1635 0.008677 \n",
"P944 0.008226 "
]
},
"execution_count": 98,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"codepConstDF3.sort_values(by=['violation_ratio'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": 102,
"id": "imposed-bibliography",
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" violation_ratio \n",
" \n",
" \n",
" \n",
" \n",
" P141 \n",
" 131232 \n",
" 3270 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.024918 \n",
" \n",
" \n",
" P1087 \n",
" 3774635 \n",
" 1210 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.000321 \n",
" \n",
" \n",
" P7959 \n",
" 657006 \n",
" 322 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.000490 \n",
" \n",
" \n",
" P5051 \n",
" 2 \n",
" 79 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 39.500000 \n",
" \n",
" \n",
" P1713 \n",
" 2935 \n",
" 79 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.026917 \n",
" \n",
" \n",
" P3931 \n",
" 2316 \n",
" 68 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.029361 \n",
" \n",
" \n",
" P451 \n",
" 12167 \n",
" 50 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.004109 \n",
" \n",
" \n",
" P915 \n",
" 28966 \n",
" 47 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.001623 \n",
" \n",
" \n",
" P197 \n",
" 174888 \n",
" 44 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.000252 \n",
" \n",
" \n",
" P990 \n",
" 1089 \n",
" 44 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.040404 \n",
" \n",
" \n",
" P1560 \n",
" 3459 \n",
" 33 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.009540 \n",
" \n",
" \n",
" P2962 \n",
" 29220 \n",
" 25 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.000856 \n",
" \n",
" \n",
" P2009 \n",
" 1036 \n",
" 17 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.016409 \n",
" \n",
" \n",
" P2364 \n",
" 9705 \n",
" 17 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.001752 \n",
" \n",
" \n",
" P2365 \n",
" 1851 \n",
" 10 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.005402 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P141 131232 3270 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P1087 3774635 1210 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P7959 657006 322 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P5051 2 79 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P1713 2935 79 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P3931 2316 68 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P451 12167 50 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P915 28966 47 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P197 174888 44 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P990 1089 44 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P1560 3459 33 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2962 29220 25 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2009 1036 17 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2364 9705 17 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2365 1851 10 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"\n",
" violation_ratio \n",
"P141 0.024918 \n",
"P1087 0.000321 \n",
"P7959 0.000490 \n",
"P5051 39.500000 \n",
"P1713 0.026917 \n",
"P3931 0.029361 \n",
"P451 0.004109 \n",
"P915 0.001623 \n",
"P197 0.000252 \n",
"P990 0.040404 \n",
"P1560 0.009540 \n",
"P2962 0.000856 \n",
"P2009 0.016409 \n",
"P2364 0.001752 \n",
"P2365 0.005402 "
]
},
"execution_count": 102,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"codepConstDF3.sort_values(by=['incorrect'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": 103,
"id": "emotional-crown",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"count 79.000000\n",
"mean 0.506010\n",
"std 4.443448\n",
"min 0.000000\n",
"25% 0.000000\n",
"50% 0.000260\n",
"75% 0.002110\n",
"max 39.500000\n",
"Name: violation_ratio, dtype: float64"
]
},
"execution_count": 103,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"codepConstDF3['violation_ratio'].describe()"
]
},
{
"cell_type": "code",
"execution_count": 104,
"id": "certain-freeze",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Co-Dependency Constraint - Version 3 - Violation Ratios')"
]
},
"execution_count": 104,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"codepConstDF3['violation_ratio'].plot.hist(bins=100).set_title(\"Co-Dependency Constraint - Version 3 - Violation Ratios\")"
]
},
{
"cell_type": "code",
"execution_count": 105,
"id": "cooperative-ownership",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Co-Dependency Constraint - Version 3 - Violation Ratios <= 0.0005')"
]
},
"execution_count": 105,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"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": 106,
"id": "studied-inclusion",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"No. of properties whose violation ratio is greater than mean: 1/79\n"
]
}
],
"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": 107,
"id": "laughing-pressing",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"codepConstDF4 = pd.DataFrame(codepConstViolations['Normal']).T"
]
},
{
"cell_type": "code",
"execution_count": 108,
"id": "loving-swift",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" \n",
" \n",
" \n",
" \n",
" P1018 \n",
" 186 \n",
" 16 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P1539 \n",
" 243577 \n",
" 551 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P209 \n",
" 163 \n",
" 1 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P574 \n",
" 5524 \n",
" 92 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P746 \n",
" 941 \n",
" 325 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" P410 \n",
" 138058 \n",
" 813 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P411 \n",
" 7629 \n",
" 5541 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P413 \n",
" 389145 \n",
" 35536 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P418 \n",
" 96 \n",
" 11 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
" P4213 \n",
" 42655 \n",
" 14 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" \n",
" \n",
"
\n",
"
424 rows × 3 columns
\n",
"
"
],
"text/plain": [
" correct incorrect paths\n",
"P1018 186 16 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P1539 243577 551 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P209 163 1 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P574 5524 92 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P746 941 325 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"... ... ... ...\n",
"P410 138058 813 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P411 7629 5541 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P413 389145 35536 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P418 96 11 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"P4213 42655 14 [../../allConstraintsAnalysis_WRemoved_Final/c...\n",
"\n",
"[424 rows x 3 columns]"
]
},
"execution_count": 108,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"codepConstDF4"
]
},
{
"cell_type": "code",
"execution_count": 109,
"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": 110,
"id": "closing-causing",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" violation_ratio \n",
" \n",
" \n",
" \n",
" \n",
" P1111 \n",
" 1 \n",
" 46803 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 46803.000000 \n",
" \n",
" \n",
" P1995 \n",
" 89 \n",
" 11360 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 127.640449 \n",
" \n",
" \n",
" P4501 \n",
" 425 \n",
" 22684 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 53.374118 \n",
" \n",
" \n",
" P768 \n",
" 297 \n",
" 15346 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 51.670034 \n",
" \n",
" \n",
" P275 \n",
" 7295 \n",
" 163856 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 22.461412 \n",
" \n",
" \n",
" P2306 \n",
" 1 \n",
" 15 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 15.000000 \n",
" \n",
" \n",
" P3912 \n",
" 312 \n",
" 3775 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 12.099359 \n",
" \n",
" \n",
" P2248 \n",
" 4025 \n",
" 41608 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 10.337391 \n",
" \n",
" \n",
" P2303 \n",
" 4 \n",
" 40 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 10.000000 \n",
" \n",
" \n",
" P2325 \n",
" 4079 \n",
" 40619 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 9.958078 \n",
" \n",
" \n",
" P2720 \n",
" 15 \n",
" 140 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 9.333333 \n",
" \n",
" \n",
" P2243 \n",
" 4035 \n",
" 36870 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 9.137546 \n",
" \n",
" \n",
" P2244 \n",
" 4036 \n",
" 36801 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 9.118186 \n",
" \n",
" \n",
" P3448 \n",
" 579 \n",
" 4620 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 7.979275 \n",
" \n",
" \n",
" P1183 \n",
" 683 \n",
" 5394 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 7.897511 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P1111 1 46803 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P1995 89 11360 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P4501 425 22684 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P768 297 15346 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P275 7295 163856 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2306 1 15 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P3912 312 3775 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2248 4025 41608 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2303 4 40 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2325 4079 40619 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2720 15 140 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2243 4035 36870 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2244 4036 36801 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P3448 579 4620 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P1183 683 5394 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"\n",
" violation_ratio \n",
"P1111 46803.000000 \n",
"P1995 127.640449 \n",
"P4501 53.374118 \n",
"P768 51.670034 \n",
"P275 22.461412 \n",
"P2306 15.000000 \n",
"P3912 12.099359 \n",
"P2248 10.337391 \n",
"P2303 10.000000 \n",
"P2325 9.958078 \n",
"P2720 9.333333 \n",
"P2243 9.137546 \n",
"P2244 9.118186 \n",
"P3448 7.979275 \n",
"P1183 7.897511 "
]
},
"execution_count": 110,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"codepConstDF4.sort_values(by=['violation_ratio'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": 112,
"id": "brief-effect",
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" correct \n",
" incorrect \n",
" paths \n",
" violation_ratio \n",
" \n",
" \n",
" \n",
" \n",
" P2214 \n",
" 2989348 \n",
" 721476 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.241349 \n",
" \n",
" \n",
" P433 \n",
" 31113458 \n",
" 436995 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.014045 \n",
" \n",
" \n",
" P275 \n",
" 7295 \n",
" 163856 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 22.461412 \n",
" \n",
" \n",
" P2860 \n",
" 174842113 \n",
" 152425 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.000872 \n",
" \n",
" \n",
" P1435 \n",
" 2121637 \n",
" 92401 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.043552 \n",
" \n",
" \n",
" P708 \n",
" 45718 \n",
" 57276 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.252811 \n",
" \n",
" \n",
" P197 \n",
" 122018 \n",
" 52917 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.433682 \n",
" \n",
" \n",
" P1598 \n",
" 40600 \n",
" 49329 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 1.215000 \n",
" \n",
" \n",
" P1111 \n",
" 1 \n",
" 46803 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 46803.000000 \n",
" \n",
" \n",
" P856 \n",
" 1451949 \n",
" 44006 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.030308 \n",
" \n",
" \n",
" P2248 \n",
" 4025 \n",
" 41608 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 10.337391 \n",
" \n",
" \n",
" P2325 \n",
" 4079 \n",
" 40619 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 9.958078 \n",
" \n",
" \n",
" P2243 \n",
" 4035 \n",
" 36870 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 9.137546 \n",
" \n",
" \n",
" P2244 \n",
" 4036 \n",
" 36801 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 9.118186 \n",
" \n",
" \n",
" P413 \n",
" 389145 \n",
" 35536 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
" 0.091318 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P2214 2989348 721476 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P433 31113458 436995 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P275 7295 163856 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2860 174842113 152425 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P1435 2121637 92401 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P708 45718 57276 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P197 122018 52917 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P1598 40600 49329 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P1111 1 46803 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P856 1451949 44006 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2248 4025 41608 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2325 4079 40619 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2243 4035 36870 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P2244 4036 36801 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"P413 389145 35536 [../../allConstraintsAnalysis_WRemoved_Final/c... \n",
"\n",
" violation_ratio \n",
"P2214 0.241349 \n",
"P433 0.014045 \n",
"P275 22.461412 \n",
"P2860 0.000872 \n",
"P1435 0.043552 \n",
"P708 1.252811 \n",
"P197 0.433682 \n",
"P1598 1.215000 \n",
"P1111 46803.000000 \n",
"P856 0.030308 \n",
"P2248 10.337391 \n",
"P2325 9.958078 \n",
"P2243 9.137546 \n",
"P2244 9.118186 \n",
"P413 0.091318 "
]
},
"execution_count": 112,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"codepConstDF4.sort_values(by=['incorrect'],ascending=False).head(15)"
]
},
{
"cell_type": "code",
"execution_count": 113,
"id": "wireless-passenger",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"count 424.000000\n",
"mean 111.550177\n",
"std 2272.909916\n",
"min 0.000000\n",
"25% 0.001966\n",
"50% 0.036278\n",
"75% 0.260204\n",
"max 46803.000000\n",
"Name: violation_ratio, dtype: float64"
]
},
"execution_count": 113,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"codepConstDF4['violation_ratio'].describe()"
]
},
{
"cell_type": "code",
"execution_count": 114,
"id": "civilian-arnold",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Co-Dependency Constraint - Version 4 - Violation Ratios')"
]
},
"execution_count": 114,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEICAYAAACwDehOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAg3ElEQVR4nO3de5wcVZ338c+XJIQ7SciYDUkggCgbvEQcERFXFlQgoMFHcUGUi0hE4Vl48CUEZBEv7IPu+nBZr1GQROUSQQG5qOEmsgoxQIBwWwYIJiEhQ0iAiASB3/PHOV1UOj0zncx09yTzfb9e/ZqqU6eqf3W6qn5ddaqnFBGYmZkBbNTqAMzMrP9wUjAzs4KTgpmZFZwUzMys4KRgZmYFJwUzMys4KazHJI2XFJIGtzqW9Z2kwyX9rtVx9LUNZb0k/UDSv9VZNyS9cR3fZ71pL0krJe3Y18vdIJKCpE9KmpMbabGkGyTttY7LuljSy5JeyK95kv6vpK37Ou4NkaStJJ0n6S/583gsj49s4HteLOkbvVlGRPw8Ij5U5/sdJen2dX0vSYdKmi9JVeWDJS2VdNC6Lrva2qzXupJ0Zj4Qf2Ad558q6bYa5SPzvviWiDguIr7e+2hXW/4aX6oa1V6S9pb0Wt4nXpD0iKSj12L+WyV9tlwWEVtExON9Het6nxQknQycB/w7MArYDvgeMLkXi/1WRGwJtAFHA3sA/y1p895Fu2GTtDFwE7ArsD+wFfAeYBmwewvj6m9nUlcBw4D3V5XvDwTwm3oXpKRl+7GknYBDgMW9WMzPgD0l7VBVfihwf0TM68Wy+5OnImIL0n7xf4AfSXpzi2NaU0Ssty9ga2AlcEg3dYaSksZT+XUeMLSb+hcD36gq25K00Z9QKvsM8BCwHPgtsH1pWgD/CjwOPAP8B7DRWsx7HPAosAL4LqA8bRDwn3mZjwPH5/qDS+1xYY51EfANYFCedhRwe55/OfAEcEDpfUcAP8lttBy4KpfPAz5cqjckv/87arTdZ4GngS26ad9/BG7N6/YA8JGqtv8ucB3wAnAnsFOeJuBcYCnwPHA/8BZgCvB34OW8Lfw6158PnArcB6wCBgNTgcfysh8EPlp676OA23v6HHL8LwGv5vdbsY7b7jTgoqqymcC5eXgP4I/5ve8F9i7VuxU4G/hv4G/AG3P8j+d1ewI4vIv12hP4M/Bc/rtn1XK/npf7AvA7YGQP6/EbYFJu7w/0Yl/+HXBmVdls4MRa+yVwLNABPAtcA2xb9dm9MQ8fCNyTt5kFwFmlen/JdVfm13sa1V7A3sDCqrKl5GMXMBy4Fugk7X/XAmPztLPz9vZSjvM7NdZza2BGnv9J4AzyMSdvH7/P6/AMcHm3n8W6foj94UX6ZvUK+aDYRZ2vAXcAbyB98/8j8PVu6q+28ZXKZ1Qak3QW0kE6QAzOH8AfqzbKW0gH2u2A/wE+uxbzXkv6Jrld/pD3z9OOAx4GxuVl38LqSeFXwA+BzfP6zgY+l6cdRTp4HktKLp8nJYBKwrkOuDxvnEOA9+fyU8obUY7//i7a7jJgejdtOySv++nAxsA+pJ3pzaW2r5xVDAZ+DlyWp+0H3JXbpXJwHt3VZ0Y6SM3NbbVpLjsE2JZ0hvwvwF9LyziKNZNCV5/DanXXcdt9L+lAVYlta9IBfiIwJrfDpBzrB/N4W657K+mAtmtup63zsirtOBrYtTrWvM0sBz6d5zssj29TWu5jwJuATfP4Od2swyHA1aX27k1SOBx4tDT+ZlKir6xz8Rnn7eYZYDfSl77/Am6r+uwqB8u9gbfmdnwb6UvLwXnaeEr7TyPbi1JSyLF8BHiN/OUK2Ab4GLAZ6UvoL8hfzErv9dmqZZbXcwZwdZ53POmYc0yedinw5fy+mwB7dftZ9GbDbvUrb0hLeqjzGDCpNL4fML+b+sXGV1V+DjArD99QafDSh/wi+Rt//rD2L03/AnDTWsy7V2n6TGBqHr4ZOK407UOVjZp06WwV+SCTpx8G3FLa2DtK0zbL8/4D6SDyGjC8xnpvSzpwb5XHrwBO6aLtZnW1U+Tp7wOWsPpZ06Xkb2+57X9cmjYJeDgP75M39D3K83f1mZEOUp/pYduYC0wutU91Uujqc1itbi+230eBT+bhY4F78/CpwE+r6v4WODIP3wp8rTRtc9IZxcfKn391rKSD2+yq6X8Cjiot94yq7fY3XcS+ZY5/fKm9e5MUNiMltj3z+NnkhFP9GZPOhr9VmrYF6QtPJZbiYFnjfc7j9bOx8XSfFPqyvfYm7WMrSPvpq8BJ3bTHRGB5afxWukgKpC95LwMTStM+B9yah2eQzkzH1vNZrO99CsuAkT1cM96WdDpV8WQuQ9LpueNnpaQf9PBeY0inqgDbA+dLWiFpRS5XrlOxoNZ71jnvktLwi6SNvrIu1cut2J70TXxxadk/JJ0xrLHciHgxD25B+jb9bEQsr17piHiKdHr8MUnDgANI3+BrWUZKMF3ZFlgQEa9VrUOP6x4RNwPfIV3GWSppmqStunkvWL2tkHSEpLml9nkL0F0HeFefQ7ckva+0XT3QTdUZwBF5+NN5HNJneUglzhzrXqzetsW6RcRfSWc+x5E+/+sk7VLj/ar3Baiz/Ws4i5S45ncxvZDv6Km0xw216uTt8RfAEbkD/nBeb49qq61HRKwkbXtjqitKerekWyR1SnqO1Eb13vTQl+0FqU9hGKlP4QLSF51KnJtJ+qGkJyU9D9wGDJM0qI44R5L2/erjXCXOU0jHmNmSHpD0me4Wtr4nhT+Rsu7B3dR5irSTVWyXy4iIf4/Ug79FRBzX1QIkbQF8APhDLlpAuiwzrPTaNCL+WJptXK33rHPeriyusdyKBaS2GFla7lYRsWsdy10AjMgH/VqmA58iXS74U0Qs6qLejcB+3XTIPwWMq+oY3Y7U/9GjiLggIt4JTCCdsn+pMqmrWSoDkrYHfgScQDr9H0bqL1HtWbsPpYc4/1Darrpr/58C+0p6D+kMqJJsF5AOuOVtZPOIOKerGCLitxHxQVLieJi0rtWq9wVYi/avsi/wr5KWSFpC2i5nSjq1umKkO3oq7XFAN8ucDnyCdLlsS+DXXdRbbT3y9rZNF+txCanPYVxEbA38gNc/824/x+r3yda1vQoRsYp0NvhWSQfn4i+SLpm9OyK2Av4pl9cT6zOkM6Xq49yi/H5LIuLYiNiWdAbxve5u2V2vk0JEPAecCXxX0sE52w6RdICkb+VqlwJnSGrLt0WeSbrboUeShkp6J+lukeWkjlhIG9ZpknbN9baWdEjV7F+SNFzSOOBE0vX6euftykzSjjhW0nBSx2mlLRaTOrq+nW8L3UjSTpLe39NC87w3kDaW4bkN/6lU5SrS9dsT6frbG6SD3ALgSkm75Bi2yWdkk0gdxy8Cp+T32Bv4MKkvoluS3pW/9Q0h9QW8RDodh3SduKf7tTcn7VideXlHk84U1sXTwNh8t9U6y9+ybydto7MiovKt82fAhyXtJ2mQpE3yLY1jay1H0ihJk/PBcRWpM/K1GlWvB96kdAv3YEn/Qkqw165D+PuS2m9ifj1FOuB8dx2WVfEH0uWVaaS+pJe7qHcpcLSkiZKGku48vLOLs5YtSWfBL0naHfhkaVonqZ262nb6sr1Wk9ft26TjUSXOvwErJI0AvlI1S5fbeES8Sjo2nC1py/wF6GTycU7SIaVtZzlpP6i1fQDreVIAiIhvkxrgDNKHvID0bfCqXOUbwBzSXSj3A3fnsu6cIukF0inpDFIH5575NJ2I+BXwTeCyfKo3j3RZpezqPN9cUifuhWsxb1d+RLq2fG9ej19WTT+C1IH7IOnDv4LuL+eUfZr0beNh0l0RJ1UmRMTfgCuBHWq8J6V6q0hnVA+T+heeJ3V2jyTttC+TksABpG833wOOiIiH64hvK9L6LyedGi8j3dUFqW0n5EstV3UR24OknfBPpB3sraTLYuviZtKdU0skPbOOy6iYTvqGVyTbiFhA6tA/nde36S/R9f66EWkfeIp0OfL9pBsJVhMRy4CDSN9Kl5EuKxwUEWu9DhGxLH8DXZKT2auka+Ar13ZZpWUGqR1Wa48a9W4E/o20TS4GdiLdvlrLF4Cv5f35TNLBs7KcF8l3ceVtZ4/qdaSP2qsLFwHbSfowqa9jU9J+cQdr3pZ8PvBxScslXVBjWf+b9GXpcdIXjUvy8gHeBdwpaSXprOnE6Ob3DZU7T6wPSQpg54joaHUsfUXSmcCbIuJTrY7FzBqnv/2ox/qhfDp7DOlswsw2YOv95SNrLEnHki5f3BARa/wrAjPbsPjykZmZFXymYGZmhfW6T2HkyJExfvz4VodhZrZeueuuu56JiLZa09brpDB+/HjmzJnT6jDMzNYrkqp/qV3w5SMzMys4KZiZWcFJwczMCk4KZmZWcFIwM7OCk4KZmRWcFMzMrOCkYGZmBScFMzMrrNe/aO6N8VOvK4bnn3NgCyMxM+s/fKZgZmYFJwUzMys4KZiZWcFJwczMCk4KZmZWcFIwM7OCk4KZmRUanhQkDZJ0j6Rr8/gOku6U1CHpckkb5/KhebwjTx/f6NjMzGx1zThTOBF4qDT+TeDciHgjsBw4JpcfAyzP5efmemZm1kQNTQqSxgIHAj/O4wL2Aa7IVaYDB+fhyXmcPH3fXN/MzJqk0WcK5wGnAK/l8W2AFRHxSh5fCIzJw2OABQB5+nO5/mokTZE0R9Kczs7OBoZuZjbwNCwpSDoIWBoRd/XlciNiWkS0R0R7W1tbXy7azGzAa+Q/xHsv8BFJk4BNgK2A84Fhkgbns4GxwKJcfxEwDlgoaTCwNbCsgfGZmVmVhp0pRMRpETE2IsYDhwI3R8ThwC3Ax3O1I4Gr8/A1eZw8/eaIiEbFZ2Zma2rF7xROBU6W1EHqM7gwl18IbJPLTwamtiA2M7MBrSnPU4iIW4Fb8/DjwO416rwEHNKMeMzMrDb/otnMzApOCmZmVnBSMDOzgpOCmZkVnBTMzKzgpGBmZgUnBTMzKzgpmJlZwUnBzMwKTgpmZlZwUjAzs4KTgpmZFZwUzMys4KRgZmYFJwUzMys08hnNm0iaLeleSQ9I+mouv1jSE5Lm5tfEXC5JF0jqkHSfpN0aFZuZmdXWyIfsrAL2iYiVkoYAt0u6IU/7UkRcUVX/AGDn/Ho38P3818zMmqSRz2iOiFiZR4fkV3fPXJ4MzMjz3QEMkzS6UfGZmdmaGtqnIGmQpLnAUmBWRNyZJ52dLxGdK2loLhsDLCjNvjCXVS9ziqQ5kuZ0dnY2MnwzswGnoUkhIl6NiInAWGB3SW8BTgN2Ad4FjABOXctlTouI9ohob2tr6+uQzcwGtKbcfRQRK4BbgP0jYnG+RLQK+Amwe662CBhXmm1sLjMzsyZp5N1HbZKG5eFNgQ8CD1f6CSQJOBiYl2e5Bjgi34W0B/BcRCxuVHxmZramRt59NBqYLmkQKfnMjIhrJd0sqQ0QMBc4Lte/HpgEdAAvAkc3MDYzM6uhYUkhIu4D3lGjfJ8u6gdwfKPiMTOznvkXzWZmVnBSMDOzgpOCmZkVnBTMzKzgpGBmZgUnBTMzKzgpmJlZwUnBzMwKTgpmZlZwUjAzs4KTgpmZFZwUzMys4KRgZmYFJwUzMys4KZiZWcFJwczMCo18HOcmkmZLulfSA5K+mst3kHSnpA5Jl0vaOJcPzeMdefr4RsVmZma1NfJMYRWwT0S8HZgI7J+fvfxN4NyIeCOwHDgm1z8GWJ7Lz831zMysiRqWFCJZmUeH5FcA+wBX5PLpwMF5eHIeJ0/fV5IaFZ+Zma2poX0KkgZJmgssBWYBjwErIuKVXGUhMCYPjwEWAOTpzwHb1FjmFElzJM3p7OxsZPhmZgNOQ5NCRLwaEROBscDuwC59sMxpEdEeEe1tbW29XZyZmZU05e6jiFgB3AK8BxgmaXCeNBZYlIcXAeMA8vStgWXNiM/MzJJG3n3UJmlYHt4U+CDwECk5fDxXOxK4Og9fk8fJ02+OiGhUfGZmtqbBPVdZZ6OB6ZIGkZLPzIi4VtKDwGWSvgHcA1yY618I/FRSB/AscGgDYzMzsxoalhQi4j7gHTXKHyf1L1SXvwQc0qh4zMysZ/5Fs5mZFZwUzMys4KRgZmYFJwUzMys4KZiZWcFJwczMCk4KZmZWcFIwM7OCk4KZmRXqSgqS3troQMzMrPXqPVP4Xn605hckbd3QiMzMrGXqSgoR8T7gcNK/tr5L0iWSPtjQyMzMrOnq7lOIiEeBM4BTgfcDF0h6WNL/alRwZmbWXPX2KbxN0rmk5yHsA3w4Iv4xD5/bwPjMzKyJ6v3X2f8F/Bg4PSL+VimMiKckndGQyMzMrOnqvXx0IHBJJSFI2kjSZgAR8dNaM0gaJ+kWSQ9KekDSibn8LEmLJM3Nr0mleU6T1CHpEUn79W7VzMxsbdV7pnAj8AFgZR7fDPgdsGc387wCfDEi7pa0JamDelaedm5E/Ge5sqQJpKet7QpsC9wo6U0R8WqdMZqZWS/Ve6awSURUEgJ5eLPuZoiIxRFxdx5+gdQfMaabWSYDl0XEqoh4AuigxhPazMyscepNCn+VtFtlRNI7gb91U381ksaTHs15Zy46QdJ9ki6SNDyXjQEWlGZbSI0kImmKpDmS5nR2dtYbgpmZ1aHepHAS8AtJf5B0O3A5cEI9M0raArgSOCkinge+D+wETAQWA99em4AjYlpEtEdEe1tb29rMamZmPairTyEi/ixpF+DNueiRiPh7T/NJGkJKCD+PiF/mZT1dmv4j4No8uoj047iKsbnMzMyaZG3+Id67gLcBuwGHSTqiu8qSBFwIPBQR/69UPrpU7aPAvDx8DXCopKGSdgB2BmavRXxmZtZLdZ0pSPop6ZLPXKByN1AAM7qZ7b3Ap4H7Jc3NZaeTEsrEPP984HMAEfGApJnAg6Q7l473nUdmZs1V7y2p7cCEiIh6FxwRtwOqMen6buY5Gzi73vcwM7O+Ve/lo3nAPzQyEDMza716zxRGAg9Kmg2sqhRGxEcaEpWZmbVEvUnhrEYGYWZm/UO9t6T+XtL2wM4RcWP+v0eDGhuamZk1W73/OvtY4Argh7loDHBVg2IyM7MWqbej+XjSLabPQ/HAnTc0KigzM2uNepPCqoh4uTIiaTDpdwZmZrYBqTcp/F7S6cCm+dnMvwB+3biwzMysFepNClOBTuB+0i+Qryc9r9nMzDYg9d599Brwo/wyM7MNVL3/++gJavQhRMSOfR6RmZm1zNr876OKTYBDgBF9H46ZmbVSXX0KEbGs9FoUEecBBzY2NDMza7Z6Lx/tVhrdiHTmUO9ZhpmZrSfqPbCXH5n5Cuk5CJ/o82jMzKyl6r376J8bHYiZmbVevZePTu5uevlxm6V5xpGezDaKdOfStIg4X9II4HJgPPmMIyKW58d3ng9MAl4EjoqIu+tfFTMz6616f7zWDnye9I/wxgDHkZ7VvGV+1fIK8MWImADsARwvaQLph3A3RcTOwE15HOAA0nOZdwamAN9f67UxM7NeqbdPYSywW0S8ACDpLOC6iPhUVzNExGJgcR5+QdJDpIQyGdg7V5sO3Aqcmstn5Ed+3iFpmKTReTlmZtYE9Z4pjAJeLo2/nMvqImk88A7gTmBU6UC/pLScMcCC0mwLc1n1sqZImiNpTmdnZ70hmJlZHeo9U5gBzJb0qzx+MOlbfo8kbQFcCZwUEc+nroMkIkLSWv231YiYBkwDaG9v939qNTPrQ/XefXS2pBuA9+WioyPinp7mkzSElBB+HhG/zMVPVy4LSRoNLM3li4BxpdnH5jIzM2uSei8fAWwGPB8R5wMLJe3QXeV8N9GFwENVdyddAxyZh48Eri6VH6FkD+A59yeYmTVXvbekfoV0B9KbgZ8AQ4CfkZ7G1pX3Ap8G7pc0N5edDpwDzJR0DPAkr/8I7nrS7agdpFtSj16bFTEzs96rt0/ho6SO4rsBIuIpSV3dikquczugLibvW6N+kB77aWZmLVLv5aOX80E7ACRt3riQzMysVepNCjMl/RAYJulY4Eb8wB0zsw1Oj5ePcofx5cAuwPOkfoUzI2JWg2MzM7Mm6zEp5N8SXB8RbwWcCMzMNmD1Xj66W9K7GhqJmZm1XL13H70b+JSk+cBfSXcVRUS8rVGBmZlZ83WbFCRtFxF/AfZrUjxmZtZCPZ0pXEX676hPSroyIj7WhJjMzKxFeupTKP/4bMdGBmJmZq3XU1KILobNzGwD1NPlo7dLep50xrBpHobXO5q3amh0ZmbWVN0mhYgY1KxAzMys9dbmX2ebmdkGzknBzMwKTgpmZlZoWFKQdJGkpZLmlcrOkrRI0tz8mlSadpqkDkmPSPKP5czMWqCRZwoXA/vXKD83Iibm1/UAkiYAhwK75nm+J8md3GZmTdawpBARtwHP1ll9MnBZRKyKiCdIj+TcvVGxmZlZba3oUzhB0n358tLwXDYGWFCqszCXrUHSFElzJM3p7OxsdKxmZgNKs5PC94GdgInAYuDba7uAiJgWEe0R0d7W1tbH4ZmZDWxNTQoR8XREvBoRr5Ee51m5RLQIGFeqOjaXmZlZEzU1KUgaXRr9KFC5M+ka4FBJQyXtAOwMzG5mbGZmVv9DdtaapEuBvYGRkhYCXwH2ljSR9M/15gOfA4iIByTNBB4EXgGOj4hXGxWbmZnV1rCkEBGH1Si+sJv6ZwNnNyoeMzPrmX/RbGZmBScFMzMrOCmYmVnBScHMzApOCmZmVnBSMDOzgpOCmZkVnBTMzKzgpGBmZgUnBTMzKzgpmJlZwUnBzMwKTgpmZlZwUjAzs4KTgpmZFZwUzMys0LCkIOkiSUslzSuVjZA0S9Kj+e/wXC5JF0jqkHSfpN0aFZeZmXWtkWcKFwP7V5VNBW6KiJ2Bm/I4wAGk5zLvDEwBvt/AuMzMrAsNSwoRcRvwbFXxZGB6Hp4OHFwqnxHJHcAwSaMbFZuZmdXW7D6FURGxOA8vAUbl4THAglK9hblsDZKmSJojaU5nZ2fjIjUzG4Ba1tEcEQHEOsw3LSLaI6K9ra2tAZGZmQ1czU4KT1cuC+W/S3P5ImBcqd7YXGZmZk3U7KRwDXBkHj4SuLpUfkS+C2kP4LnSZSYzM2uSwY1asKRLgb2BkZIWAl8BzgFmSjoGeBL4RK5+PTAJ6ABeBI5uVFxmZta1hiWFiDisi0n71qgbwPGNisXMzOrjXzSbmVnBScHMzApOCmZmVnBSMDOzgpOCmZkVnBTMzKzgpGBmZgUnBTMzKzgpmJlZwUnBzMwKTgpmZlZwUjAzs4KTgpmZFZwUzMys4KRgZmaFhj1PoTuS5gMvAK8Cr0REu6QRwOXAeGA+8ImIWN6K+MzMBqpWnin8c0RMjIj2PD4VuCkidgZuyuNmZtZE/eny0WRgeh6eDhzculDMzAamViWFAH4n6S5JU3LZqIhYnIeXAKNqzShpiqQ5kuZ0dnY2I1YzswGjJX0KwF4RsUjSG4BZkh4uT4yIkBS1ZoyIacA0gPb29pp1zMxs3bTkTCEiFuW/S4FfAbsDT0saDZD/Lm1FbGZmA1nTk4KkzSVtWRkGPgTMA64BjszVjgSubnZsZmYDXSsuH40CfiWp8v6XRMRvJP0ZmCnpGOBJ4BMtiM3MbEBrelKIiMeBt9coXwbs2+x4zMzsdf3pllQzM2sxJwUzMys4KZiZWcFJwczMCk4KZmZWcFIwM7OCk4KZmRWcFMzMrOCkYGZmBScFMzMrOCmYmVnBScHMzApOCmZmVnBSMDOzgpOCmZkVnBTMzKzQ75KCpP0lPSKpQ9LUVsdjZjaQ9KukIGkQ8F3gAGACcJikCa2Nysxs4GjFM5q7szvQkR/ZiaTLgMnAgy2NysysHxg/9bpieP45BzbkPfpbUhgDLCiNLwTeXa4gaQowJY+ulPTIOr7XSOAZAH1zHZew/ivaYABzGyRuh/WsDXp53Nq+qwn9LSn0KCKmAdN6uxxJcyKivQ9CWm+5DdwGFW4Ht0FFv+pTABYB40rjY3OZmZk1QX9LCn8Gdpa0g6SNgUOBa1ock5nZgNGvLh9FxCuSTgB+CwwCLoqIBxr0dr2+BLUBcBu4DSrcDm4DABQRrY7BzMz6if52+cjMzFrIScHMzAoDMilsaP9KQ9JFkpZKmlcqGyFplqRH89/huVySLsjrfp+k3UrzHJnrPyrpyFL5OyXdn+e5QJKau4Y9kzRO0i2SHpT0gKQTc/mAaQdJm0iaLene3AZfzeU7SLozx315vokDSUPzeEeePr60rNNy+SOS9iuV9/t9R9IgSfdIujaPD6j177WIGFAvUgf2Y8COwMbAvcCEVsfVy3X6J2A3YF6p7FvA1Dw8FfhmHp4E3AAI2AO4M5ePAB7Pf4fn4eF52uxcV3neA1q9zjXaYDSwWx7eEvgf0r9KGTDtkOPaIg8PAe7M8c4EDs3lPwA+n4e/APwgDx8KXJ6HJ+T9YiiwQ95fBq0v+w5wMnAJcG0eH1Dr39vXQDxTKP6VRkS8DFT+lcZ6KyJuA56tKp4MTM/D04GDS+UzIrkDGCZpNLAfMCsino2I5cAsYP88bauIuCPSHjOjtKx+IyIWR8TdefgF4CHSL+QHTDvkdVmZR4fkVwD7AFfk8uo2qLTNFcC++exnMnBZRKyKiCeADtJ+0+/3HUljgQOBH+dxMYDWvy8MxKRQ619pjGlRLI00KiIW5+ElwKg83NX6d1e+sEZ5v5UvA7yD9E15QLVDvnQyF1hKSmiPASsi4pVcpRx3sa55+nPANqx92/Qn5wGnAK/l8W0YWOvfawMxKQw4+ZvtgLj3WNIWwJXASRHxfHnaQGiHiHg1IiaS/hvA7sAurY2oeSQdBCyNiLtaHcv6bCAmhYHyrzSezpc8yH+X5vKu1r+78rE1yvsdSUNICeHnEfHLXDzg2gEgIlYAtwDvIV0aq/xQtRx3sa55+tbAMta+bfqL9wIfkTSfdGlnH+B8Bs76941Wd2o0+0X6FffjpA6kSmfRrq2Oqw/WazyrdzT/B6t3sH4rDx/I6h2ss3P5COAJUufq8Dw8Ik+r7mCd1Or1rbH+Il3nP6+qfMC0A9AGDMvDmwJ/AA4CfsHqHa1fyMPHs3pH68w8vCurd7Q+TupkXW/2HWBvXu9oHnDr36u2a3UALdpgJpHuTnkM+HKr4+mD9bkUWAz8nXSd8xjStdGbgEeBG0sHNpEeZPQYcD/QXlrOZ0idah3A0aXydmBenuc75F/C96cXsBfp0tB9wNz8mjSQ2gF4G3BPboN5wJm5fEdSQuvIB8ihuXyTPN6Rp+9YWtaX83o+Qukuq/Vl36lKCgNu/Xvz8r+5MDOzwkDsUzAzsy44KZiZWcFJwczMCk4KZmZWcFIwM7OCk4KZmRWcFMzMrPD/AYdVdi0OowDZAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"codepConstDF4['violation_ratio'].plot.hist(bins=100).set_title(\"Co-Dependency Constraint - Version 4 - Violation Ratios\")"
]
},
{
"cell_type": "code",
"execution_count": 115,
"id": "threaded-cooler",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Co-Dependency Constraint - Version 4 - Violation Ratios <= 0.5')"
]
},
"execution_count": 115,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"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": 116,
"id": "olympic-charlotte",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"No. of properties whose violation ratio is greater than mean: 29/424\n"
]
}
],
"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/propertiesSplit_WRemoved_Final/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": 25,
"id": "known-wednesday",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2021-04-15 07:17:19 query]: SQL Translation:\n",
"---------------------------------------------\n",
" SELECT *\n",
" FROM graph_1 AS graph_1_c1\n",
" WHERE graph_1_c1.\"label\"=?\n",
" AND graph_1_c1.\"node2\"=?\n",
" PARAS: ['P2302', 'Q21510862']\n",
"---------------------------------------------\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": 26,
"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": 27,
"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": 28,
"id": "burning-involvement",
"metadata": {},
"outputs": [],
"source": [
"constDF2.to_csv(\"../../constraintsOP/symmetricConstraint/claims.constraints_all.tsv\",sep=\"\\t\",index=False)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"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": 30,
"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": 31,
"id": "alone-cattle",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['P2316', 'P2303'], dtype=object)"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires['label'].unique()"
]
},
{
"cell_type": "code",
"execution_count": 33,
"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": 34,
"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": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires.head()"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "cellular-canal",
"metadata": {},
"outputs": [],
"source": [
"dfItemRequires = dfItemRequires.droplevel(1)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"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": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires.head()"
]
},
{
"cell_type": "markdown",
"id": "primary-netherlands",
"metadata": {},
"source": [
"### Query Generator"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "pointed-haven",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "",
"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_new_11_1_'\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(\"../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv\")):\n",
" continue\n",
" \n",
" command = \"{ time ( kgtk --debug query -i ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv \\\n",
" ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".copy2.tsv \\\n",
" --match 'tsv: (node1)-[nodeProp]->(node2), copy2: (node2)-[]->(node1)' \"\n",
" \n",
" os.system(\"cp ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".copy2.tsv\")\n",
" \n",
" if cnt % 60 == 0:\n",
" fCnt += 1\n",
" fOP = open(\"../../propertiesSplit_WRemoved_Final/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n",
" command\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 ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct.tsv \\\n",
" --graph-cache ~/sqlite3_caches/\"+graph_cache_prefix+\"_\" + str(fCnt) + \".sqlite3.db; \\\n",
" kgtk --debug ifnotexists -i ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct.tsv \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit_WRemoved_Final/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 ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + sfname + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + sfname + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + sfname + \"/claims.\" + prop + \".correct_exceptions.tsv \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".incorrect.tsv; \"\n",
"# print(command)\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk cat -i ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct_exceptions.tsv \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + sfname + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit_WRemoved_Final/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": 38,
"id": "polar-canada",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"39"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cnt"
]
},
{
"cell_type": "code",
"execution_count": 59,
"id": "virtual-disney",
"metadata": {},
"outputs": [],
"source": [
"# import os\n",
"# for i in range(1,3):\n",
"# os.system(\"screen -dm sh ../../propertiesSplit_WRemoved_Final/checkViolations/symmConst_Validator_\"+str(i)+\".sh\")"
]
},
{
"cell_type": "markdown",
"id": "coral-cheese",
"metadata": {},
"source": [
"### Analyze Violations"
]
},
{
"cell_type": "code",
"execution_count": 117,
"id": "governmental-backup",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "d0e1a54c683248f285687ab061bf42a0",
"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": "3810b55aa13b4555b826a68f7b829338",
"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": "9e776e9fb55645dba7ec10b3576da175",
"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": "ef41da59ff70419a911116181b77a6e5",
"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 = \"../../allConstraintsAnalysis_WRemoved_Final/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": 118,
"id": "helpful-offset",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"39"
]
},
"execution_count": 118,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(symmConstPropList)"
]
},
{
"cell_type": "code",
"execution_count": 119,
"id": "entertaining-rescue",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "8e5b1311ef2e428e8093ce40f572fd13",
"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": 120,
"id": "copyrighted-marshall",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'mandatory': {'correct': 7720,\n",
" 'incorrect': 61,\n",
" 'total': 7781,\n",
" 'percIncorrect': 0.7839609304716617,\n",
" 'propCount': 5},\n",
" 'normal': {'correct': 9553481,\n",
" 'incorrect': 7602206,\n",
" 'total': 17155687,\n",
" 'percIncorrect': 44.313037420186085,\n",
" 'propCount': 31},\n",
" 'suggestion': {'correct': 806179,\n",
" 'incorrect': 59278,\n",
" 'total': 865457,\n",
" 'percIncorrect': 6.849329313876947,\n",
" 'propCount': 3}}"
]
},
"execution_count": 120,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"symmConstViolationsSummary"
]
},
{
"cell_type": "code",
"execution_count": 121,
"id": "enhanced-ontario",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"18028925"
]
},
"execution_count": 121,
"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": 122,
"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",
" P2152 \n",
" 80 \n",
" 1 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.012346 \n",
" \n",
" \n",
" P1639 \n",
" 2094 \n",
" 26 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.012264 \n",
" \n",
" \n",
" P1560 \n",
" 3459 \n",
" 33 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.009450 \n",
" \n",
" \n",
" P3364 \n",
" 1806 \n",
" 1 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.000553 \n",
" \n",
" \n",
" P6185 \n",
" 281 \n",
" 0 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.000000 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P2152 80 1 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"P1639 2094 26 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"P1560 3459 33 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"P3364 1806 1 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"P6185 281 0 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"\n",
" violation_ratio \n",
"P2152 0.012346 \n",
"P1639 0.012264 \n",
"P1560 0.009450 \n",
"P3364 0.000553 \n",
"P6185 0.000000 "
]
},
"execution_count": 122,
"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": 123,
"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",
" 104551 \n",
" 24812 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.191801 \n",
" \n",
" \n",
" P1889 \n",
" 530234 \n",
" 30928 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.055114 \n",
" \n",
" \n",
" P197 \n",
" 171394 \n",
" 3538 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.020225 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P2789 104551 24812 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"P1889 530234 30928 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"P197 171394 3538 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"\n",
" violation_ratio \n",
"P2789 0.191801 \n",
"P1889 0.055114 \n",
"P197 0.020225 "
]
},
"execution_count": 123,
"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": 124,
"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",
" P5974 \n",
" 0 \n",
" 1 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 1.000000 \n",
" \n",
" \n",
" P5188 \n",
" 0 \n",
" 5 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 1.000000 \n",
" \n",
" \n",
" P1706 \n",
" 12 \n",
" 97 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.889908 \n",
" \n",
" \n",
" P521 \n",
" 421 \n",
" 1336 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.760387 \n",
" \n",
" \n",
" P2652 \n",
" 498 \n",
" 911 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.646558 \n",
" \n",
" \n",
" P684 \n",
" 7523178 \n",
" 7524749 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.500052 \n",
" \n",
" \n",
" P8702 \n",
" 6 \n",
" 2 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.250000 \n",
" \n",
" \n",
" P1382 \n",
" 10837 \n",
" 2911 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.211740 \n",
" \n",
" \n",
" P3032 \n",
" 1730 \n",
" 358 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.171456 \n",
" \n",
" \n",
" P2293 \n",
" 12492 \n",
" 2321 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.156687 \n",
" \n",
" \n",
" P451 \n",
" 10935 \n",
" 1285 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.105155 \n",
" \n",
" \n",
" P1327 \n",
" 7908 \n",
" 860 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.098084 \n",
" \n",
" \n",
" P4545 \n",
" 46 \n",
" 4 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.080000 \n",
" \n",
" \n",
" P4915 \n",
" 328 \n",
" 28 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.078652 \n",
" \n",
" \n",
" P530 \n",
" 6730 \n",
" 484 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
" 0.067092 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P5974 0 1 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"P5188 0 5 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"P1706 12 97 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"P521 421 1336 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"P2652 498 911 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"P684 7523178 7524749 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"P8702 6 2 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"P1382 10837 2911 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"P3032 1730 358 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"P2293 12492 2321 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"P451 10935 1285 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"P1327 7908 860 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"P4545 46 4 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"P4915 328 28 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"P530 6730 484 [../../allConstraintsAnalysis_WRemoved_Final/s... \n",
"\n",
" violation_ratio \n",
"P5974 1.000000 \n",
"P5188 1.000000 \n",
"P1706 0.889908 \n",
"P521 0.760387 \n",
"P2652 0.646558 \n",
"P684 0.500052 \n",
"P8702 0.250000 \n",
"P1382 0.211740 \n",
"P3032 0.171456 \n",
"P2293 0.156687 \n",
"P451 0.105155 \n",
"P1327 0.098084 \n",
"P4545 0.080000 \n",
"P4915 0.078652 \n",
"P530 0.067092 "
]
},
"execution_count": 124,
"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": 126,
"id": "legitimate-aspect",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Symmetric Normal Constraint - Violation Ratios')"
]
},
"execution_count": 126,
"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": "code",
"execution_count": 127,
"id": "junior-marketing",
"metadata": {},
"outputs": [],
"source": [
"pd.concat([symmConstDF1, symmConstDF2, symmConstDF3]).to_csv('../../allConstraintsAnalysis_WRemoved_Final/symmConstDFAnalysis.csv')"
]
},
{
"cell_type": "markdown",
"id": "unlikely-sewing",
"metadata": {},
"source": [
"### Find out time required"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "southern-reasoning",
"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",
"filePath = '/data/wd-correctness/propertiesSplit_WRemoved_Final/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": null,
"id": "classical-updating",
"metadata": {},
"outputs": [],
"source": [
"print(pd.Series(times).describe())"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "fundamental-bottle",
"metadata": {},
"outputs": [],
"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 node2 must have the specified property and the value must be node1."
]
},
{
"cell_type": "markdown",
"id": "dramatic-manchester",
"metadata": {},
"source": [
"### Constraints File"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "leading-server",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2021-04-15 07:17:37 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": 40,
"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": 41,
"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": 42,
"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": 43,
"id": "valid-throat",
"metadata": {},
"outputs": [],
"source": [
"constDF2.to_csv(\"../../constraintsOP/inverseConstraint/claims.constraints_all.tsv\",sep=\"\\t\",index=False)"
]
},
{
"cell_type": "code",
"execution_count": 44,
"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": 45,
"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": 46,
"id": "attached-rings",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['P2306', 'P2316', 'P4155', 'P2303'], dtype=object)"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires['label'].unique()"
]
},
{
"cell_type": "code",
"execution_count": 48,
"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": 49,
"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": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires.head()"
]
},
{
"cell_type": "code",
"execution_count": 50,
"id": "extra-stomach",
"metadata": {},
"outputs": [],
"source": [
"dfItemRequires = dfItemRequires.droplevel(1)"
]
},
{
"cell_type": "code",
"execution_count": 51,
"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": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dfItemRequires.head()"
]
},
{
"cell_type": "markdown",
"id": "composite-cutting",
"metadata": {},
"source": [
"### Query Generator"
]
},
{
"cell_type": "code",
"execution_count": 52,
"id": "acoustic-belarus",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "13b5b09ee42643d687f6eff8bf93dfcd",
"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'\n",
"shellFileSuffix = 'invConst_Validator_'\n",
"graph_cache_file_prefix = \"inv_new_11_1_\"\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(\"../../propertiesSplit_WRemoved_Final/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(\"../../propertiesSplit_WRemoved_Final/claims.\"+ prop2 +\".tsv\")):\n",
" print(f\"File: ../../propertiesSplit_WRemoved_Final/claims.{prop2}.tsv does not exist\")\n",
" continue\n",
" \n",
" if cnt % 60 == 0:\n",
" if fOP:\n",
" fOP.close()\n",
" fCnt += 1\n",
" fOP = open(\"../../propertiesSplit_WRemoved_Final/checkViolations/\" + shellFileSuffix + str(fCnt) + \".sh\",\"w\")\n",
" \n",
" \n",
" command = \"{ time ( kgtk --debug query -i ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv \\\n",
" ../../propertiesSplit_WRemoved_Final/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 ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".\"\n",
" \n",
" command += commandRest + commandOPFile + \"incorrect.tsv ) } 2>> ../../propertiesSplit_WRemoved_Final/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 ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../propertiesSplit_WRemoved_Final/claims.\"+ prop +\".tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \"\n",
" \n",
" commandOPFile = \"-o ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --match '(node1)-[]->()' --where 'node1 in \" + str(list(excptns)).replace(\"'\",'\"') + \"' \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + 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 ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_wo_exceptions.tsv \\\n",
" --filter-on ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\" + prop + \".incorrect_w_exceptions.tsv \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect.tsv; \"\n",
"# print(command)\n",
" fOP.write(command)\n",
" \n",
" command = \" kgtk cat -i ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct_wo_exceptions.tsv \\\n",
" ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".incorrect_w_exceptions.tsv \\\n",
" -o ../../allConstraintsAnalysis_WRemoved_Final/\" + folderName + \"/\" + subFolderName + \"/claims.\"+ prop +\".correct.tsv ) } 2>> ../../propertiesSplit_WRemoved_Final/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": 53,
"id": "large-climb",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"110"
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cnt"
]
},
{
"cell_type": "code",
"execution_count": 60,
"id": "involved-vietnamese",
"metadata": {},
"outputs": [],
"source": [
"# import os\n",
"# for i in range(1,7):\n",
"# os.system(\"screen -dm sh ../../propertiesSplit_WRemoved_Final/checkViolations/invConst_Validator_\"+str(i)+\".sh\")"
]
},
{
"cell_type": "markdown",
"id": "retired-audio",
"metadata": {},
"source": [
"### Analyze Violations"
]
},
{
"cell_type": "code",
"execution_count": 129,
"id": "specified-evanescence",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "e5f9d7c3cc9b4c5bb69fa64c89494ed0",
"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": "10896285c1ae44658231d4707c063b4a",
"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": "008db059edb54c4d9758ed501f4768c0",
"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": "d32635d6310c4ae7a2907510f8d90ea7",
"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 = \"../../allConstraintsAnalysis_WRemoved_Final/inverseConstraint/\"\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": 130,
"id": "circular-africa",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"110"
]
},
"execution_count": 130,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(invConstPropList)"
]
},
{
"cell_type": "code",
"execution_count": 131,
"id": "recreational-world",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "f6cd62e50d934301a630cb053391a4cd",
"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": 132,
"id": "headed-singer",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'mandatory': {'correct': 6872,\n",
" 'incorrect': 170,\n",
" 'total': 7042,\n",
" 'percIncorrect': 2.4140869071286564,\n",
" 'propCount': 6},\n",
" 'normal': {'correct': 7489249,\n",
" 'incorrect': 381880,\n",
" 'total': 7871129,\n",
" 'percIncorrect': 4.851654699090817,\n",
" 'propCount': 100},\n",
" 'suggestion': {'correct': 2150990,\n",
" 'incorrect': 107016,\n",
" 'total': 2258006,\n",
" 'percIncorrect': 4.739402818238747,\n",
" 'propCount': 4}}"
]
},
"execution_count": 132,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"invConstViolationsSummary"
]
},
{
"cell_type": "code",
"execution_count": 133,
"id": "russian-steering",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"10136177"
]
},
"execution_count": 133,
"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": 134,
"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",
" 70 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.077008 \n",
" \n",
" \n",
" P4147 \n",
" 286 \n",
" 8 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.027211 \n",
" \n",
" \n",
" P450 \n",
" 1779 \n",
" 30 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.016584 \n",
" \n",
" \n",
" P1151 \n",
" 1803 \n",
" 30 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.016367 \n",
" \n",
" \n",
" P2033 \n",
" 1879 \n",
" 28 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.014683 \n",
" \n",
" \n",
" P4149 \n",
" 286 \n",
" 4 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.013793 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P2673 839 70 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P4147 286 8 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P450 1779 30 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P1151 1803 30 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P2033 1879 28 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P4149 286 4 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"\n",
" violation_ratio \n",
"P2673 0.077008 \n",
"P4147 0.027211 \n",
"P450 0.016584 \n",
"P1151 0.016367 \n",
"P2033 0.014683 \n",
"P4149 0.013793 "
]
},
"execution_count": 134,
"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": 135,
"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",
" 5071 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.579675 \n",
" \n",
" \n",
" P155 \n",
" 1036647 \n",
" 56650 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.051816 \n",
" \n",
" \n",
" P156 \n",
" 1036636 \n",
" 44187 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.040883 \n",
" \n",
" \n",
" P629 \n",
" 74030 \n",
" 1108 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.014746 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P1434 3677 5071 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P155 1036647 56650 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P156 1036636 44187 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P629 74030 1108 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"\n",
" violation_ratio \n",
"P1434 0.579675 \n",
"P155 0.051816 \n",
"P156 0.040883 \n",
"P629 0.014746 "
]
},
"execution_count": 135,
"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": 136,
"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",
" 191 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.936275 \n",
" \n",
" \n",
" P3448 \n",
" 605 \n",
" 4595 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.883654 \n",
" \n",
" \n",
" P926 \n",
" 1 \n",
" 6 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.857143 \n",
" \n",
" \n",
" P1029 \n",
" 490 \n",
" 2662 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.844543 \n",
" \n",
" \n",
" P925 \n",
" 1 \n",
" 5 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.833333 \n",
" \n",
" \n",
" P115 \n",
" 6948 \n",
" 25081 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.783072 \n",
" \n",
" \n",
" P5134 \n",
" 23 \n",
" 54 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.701299 \n",
" \n",
" \n",
" P3816 \n",
" 14 \n",
" 27 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.658537 \n",
" \n",
" \n",
" P1283 \n",
" 1405 \n",
" 2479 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.638260 \n",
" \n",
" \n",
" P8625 \n",
" 9 \n",
" 15 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.625000 \n",
" \n",
" \n",
" P425 \n",
" 2741 \n",
" 3337 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.549029 \n",
" \n",
" \n",
" P5132 \n",
" 81 \n",
" 90 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.526316 \n",
" \n",
" \n",
" P2512 \n",
" 221 \n",
" 172 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.437659 \n",
" \n",
" \n",
" P1677 \n",
" 6 \n",
" 4 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.400000 \n",
" \n",
" \n",
" P2578 \n",
" 1111 \n",
" 723 \n",
" [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
" 0.394220 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" correct incorrect paths \\\n",
"P1605 13 191 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P3448 605 4595 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P926 1 6 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P1029 490 2662 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P925 1 5 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P115 6948 25081 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P5134 23 54 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P3816 14 27 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P1283 1405 2479 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P8625 9 15 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P425 2741 3337 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P5132 81 90 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P2512 221 172 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P1677 6 4 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"P2578 1111 723 [../../allConstraintsAnalysis_WRemoved_Final/i... \n",
"\n",
" violation_ratio \n",
"P1605 0.936275 \n",
"P3448 0.883654 \n",
"P926 0.857143 \n",
"P1029 0.844543 \n",
"P925 0.833333 \n",
"P115 0.783072 \n",
"P5134 0.701299 \n",
"P3816 0.658537 \n",
"P1283 0.638260 \n",
"P8625 0.625000 \n",
"P425 0.549029 \n",
"P5132 0.526316 \n",
"P2512 0.437659 \n",
"P1677 0.400000 \n",
"P2578 0.394220 "
]
},
"execution_count": 136,
"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": 138,
"id": "entire-gauge",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Symmetric Normal Constraint - Violation Ratios')"
]
},
"execution_count": 138,
"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": "code",
"execution_count": 139,
"id": "infectious-clothing",
"metadata": {},
"outputs": [],
"source": [
"pd.concat([invConstDF1, invConstDF2, invConstDF3]).to_csv('../../allConstraintsAnalysis_WRemoved_Final/invConstDFAnalysis.csv')"
]
},
{
"cell_type": "markdown",
"id": "working-stable",
"metadata": {},
"source": [
"### Find out time required"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "saved-twelve",
"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",
"filePath = '/data/wd-correctness/propertiesSplit_WRemoved_Final/checkViolations/exec_logs/'\n",
"for filename in tqdm(os.listdir(filePath)):\n",
" if filename.startswith(\"invConst_Validator\"):\n",
" tempTimes = extractTimes(filePath + filename)\n",
" times += tempTimes"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "caroline-observation",
"metadata": {},
"outputs": [],
"source": [
"print(pd.Series(times).describe())"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "static-conclusion",
"metadata": {},
"outputs": [],
"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": "mature-suite",
"metadata": {},
"source": [
"# Combine Plots for constraints"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "behind-nurse",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import seaborn as sns\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"typeConstDF = pd.read_csv(\"../../allConstraintsAnalysis_WRemoved_Final/typeConstDFAnalysis.csv\")\n",
"typeConstDF = typeConstDF.set_index(typeConstDF.iloc[:, 0])\n",
"\n",
"valTypeConstDF = pd.read_csv(\"../../allConstraintsAnalysis_WRemoved_Final/valueTypeConstDFAnalysis.csv\")\n",
"valTypeConstDF = valTypeConstDF.set_index(valTypeConstDF.iloc[:, 0])\n",
"\n",
"codepConstDF1 = pd.read_csv(\"../../allConstraintsAnalysis_WRemoved_Final/codepConstDFAnalysis.csv\")\n",
"codepConstDF1 = codepConstDF1.set_index(codepConstDF1.iloc[:, 0])\n",
"\n",
"symmConstDF = pd.read_csv(\"../../allConstraintsAnalysis_WRemoved_Final/symmConstDFAnalysis.csv\")\n",
"symmConstDF = symmConstDF.set_index(symmConstDF.iloc[:, 0])\n",
"\n",
"invConstDF = pd.read_csv(\"../../allConstraintsAnalysis_WRemoved_Final/invConstDFAnalysis.csv\")\n",
"invConstDF = invConstDF.set_index(invConstDF.iloc[:, 0])"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "ultimate-chorus",
"metadata": {},
"outputs": [],
"source": [
"typeConstDF1 = typeConstDF.add_suffix(\"_type_const\")['violation_ratio_type_const'].rename().sort_values()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "dynamic-castle",
"metadata": {},
"outputs": [],
"source": [
"valTypeConstDF1 = valTypeConstDF.add_suffix(\"_valuetype_const\")['violation_ratio_valuetype_const'].sort_values()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "global-performer",
"metadata": {},
"outputs": [],
"source": [
"codepConstDF1_1 = codepConstDF1.add_suffix(\"_codep_const\")['violation_ratio_codep_const'].sort_values()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "enabling-instrumentation",
"metadata": {},
"outputs": [],
"source": [
"symmConstDF1_1 = symmConstDF.add_suffix(\"_symm_const\")['violation_ratio_symm_const'].sort_values()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "realistic-cannon",
"metadata": {},
"outputs": [],
"source": [
"invConstDF1_1 = invConstDF.add_suffix(\"_inv_const\")['violation_ratio_inv_const'].sort_values()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "about-coalition",
"metadata": {},
"outputs": [],
"source": [
"typeConstDF1.index.names = ['property']\n",
"typeConstDF1 = typeConstDF1.reset_index().reset_index()\n",
"typeConstDF1['index'] = typeConstDF1['index'].apply(lambda p: (p+1) * 100/len(typeConstDF1))\n",
"typeConstDF1 = typeConstDF1.set_index('index')[0]"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "hidden-anaheim",
"metadata": {},
"outputs": [],
"source": [
"valTypeConstDF1.index.names = ['property']\n",
"valTypeConstDF1 = valTypeConstDF1.reset_index().reset_index()\n",
"valTypeConstDF1['index'] = valTypeConstDF1['index'].apply(lambda p: (p+1) * 100/len(valTypeConstDF1))\n",
"valTypeConstDF1 = valTypeConstDF1.set_index('index')['violation_ratio_valuetype_const']"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "toxic-straight",
"metadata": {},
"outputs": [],
"source": [
"codepConstDF1_1.index.names = ['property']\n",
"codepConstDF1_1 = codepConstDF1_1.reset_index().reset_index()\n",
"codepConstDF1_1['index'] = codepConstDF1_1['index'].apply(lambda p: (p+1) * 100/len(codepConstDF1_1))\n",
"codepConstDF1_1 = codepConstDF1_1.set_index('index')['violation_ratio_codep_const']"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "legal-socket",
"metadata": {},
"outputs": [],
"source": [
"symmConstDF1_1.index.names = ['property']\n",
"symmConstDF1_1 = symmConstDF1_1.reset_index().reset_index()\n",
"symmConstDF1_1['index'] = symmConstDF1_1['index'].apply(lambda p: (p+1) * 100/len(symmConstDF1_1))\n",
"symmConstDF1_1 = symmConstDF1_1.set_index('index')['violation_ratio_symm_const']"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "dietary-attack",
"metadata": {},
"outputs": [],
"source": [
"invConstDF1_1.index.names = ['property']\n",
"invConstDF1_1 = invConstDF1_1.reset_index().reset_index()\n",
"invConstDF1_1['index'] = invConstDF1_1['index'].apply(lambda p: (p+1) * 100/len(invConstDF1_1))\n",
"invConstDF1_1 = invConstDF1_1.set_index('index')['violation_ratio_inv_const']"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "familiar-packing",
"metadata": {},
"outputs": [],
"source": [
"typeConstDF2 = [np.percentile(typeConstDF1,i)*100 for i in range(1, 101)]\n",
"valTypeConstDF2 = [np.percentile(valTypeConstDF1,i)*100 for i in range(1, 101)]\n",
"codepConstDF1_2 = [np.percentile(codepConstDF1_1,i)*100 for i in range(1, 101)]\n",
"symmConstDF1_2 = [np.percentile(symmConstDF1_1,i)*100 for i in range(1, 101)]\n",
"invConstDF1_2 = [np.percentile(invConstDF1_1,i)*100 for i in range(1, 101)]"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "forward-tutorial",
"metadata": {},
"outputs": [],
"source": [
"constAnalysisDF = pd.DataFrame({'index':list(range(1, 101)), 'type': typeConstDF2, 'value type': valTypeConstDF2, 'irs': codepConstDF1_2, 'symmetric': symmConstDF1_2, 'inverse': invConstDF1_2})"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "mobile-rings",
"metadata": {},
"outputs": [],
"source": [
"constAnalysisDF = constAnalysisDF.melt('index', var_name='constraint', value_name='VR')"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "contrary-conviction",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" index \n",
" constraint \n",
" VR \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 1 \n",
" type \n",
" 0.0 \n",
" \n",
" \n",
" 1 \n",
" 2 \n",
" type \n",
" 0.0 \n",
" \n",
" \n",
" 2 \n",
" 3 \n",
" type \n",
" 0.0 \n",
" \n",
" \n",
" 3 \n",
" 4 \n",
" type \n",
" 0.0 \n",
" \n",
" \n",
" 4 \n",
" 5 \n",
" type \n",
" 0.0 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" index constraint VR\n",
"0 1 type 0.0\n",
"1 2 type 0.0\n",
"2 3 type 0.0\n",
"3 4 type 0.0\n",
"4 5 type 0.0"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"constAnalysisDF.head()"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "ruled-rough",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[Text(0.5, 0, 'Proportion of properties (in %)'),\n",
" Text(0, 0.5, 'Violation Ratio (in %)')]"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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0y9+SmJ4In878W/Eh8cf8bUKqlvoFxeOJW8t7joHsbOPOeg5Po+fsryGbtFdCZKQ9SqSkAkhhOgJipqKuGHhDTgsDp476TlSI49u3uaCmhYGJkXRuPALAGJPPfiDAWU7GvD7jG7RXQmSkHW6u+66i6eeeqr9/f3338+jjz5Kc3Mz8+bNY9KkSYwdO5YPPvhgn3MXLVrEGWec0f7+5z//OS+//DIAq1atYvbs2UyePJmTTz55nwr+y5cv58MPP2TBggVMmDCBHTt2MGnSpPb927dvb38/cOBA7rjjDsaOHcu0adPIy8sDoKqqivPOO4+pU6cydepUvv766077uQghhBAATZ4mfrLwJ3gMD8+d+BzZMdlHfc2CGicDk6No+not4Yke7MMnHvSc4i21WKyKfkO6R53Q3l2H7NO7oHxD514zfSyc+uB+d1900UXccsst3HTTTQD861//4r///S/h4eG89957xMbGUl1dzfTp0znrrLMO6TFbr9fLL37xCz744ANSUlJ46623uPvuu3nxxRfbjzn22GM566yzOOOMMzj//PMBiIuLY+3atUyYMIGXXnppr+mb4uLi2LBhA6+++iq33HILH330ETfffDO33norxx13HIWFhZx88sls3rz5SH9SQgghxF601ty3/D5Kmkt48eQXj6gA7A81tHqpbfEwQjfi2lVN6hQFjoOPRSvaXEf6oDgc4d0jFeoeUfQiEydOpLKyktLSUqqqqkhISCA7Oxuv18uvf/1rlixZgsVioaSkhIqKCtIPUiMFYOvWrWzcuJETTzwRAL/fT79+/Q563nXXXcdLL73En//8Z9566y2+//779n1tUzldcskl3HrrrYA5s8CeXZ6NjY00Nzd32hg3IYQQfdtbW99i4a6F3DLpFialTTr4CYegoLoFgKFbVgAQM/bg3Z+tzR6qipqYdkZOp8TQGXp3QnaAlqxguuCCC3jnnXcoLy9vn5fy9ddfp6qqilWrVmG32xk4cCAul2uv82w2G4ZhtL9v26+1ZvTo0XzzzTeHFcd5553Hb3/7W+bOncvkyZNJSkpq37dny1zbumEYfPvtt4SHhx/eBxZCCCEOYnPNZh5e8TDHZR7H1WOuPvgJh6igxkzIElYsJTzViqP/wIOeU7K1HnT3KHfRRsaQBcFFF13Em2++yTvvvMMFF1wAQENDA6mpqdjtdr76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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(10, 6))\n",
"ax = sns.lineplot(x='index', y='VR', hue='constraint', data=constAnalysisDF)\n",
"ax.set(xlabel=\"Proportion of properties (in %)\", ylabel = \"Violation Ratio (in %)\")"
]
},
{
"cell_type": "markdown",
"id": "eleven-album",
"metadata": {},
"source": [
"Fin."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "brilliant-drawing",
"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
}