src/HOL/Tools/Sledgehammer/MaSh/src/readData.py
author blanchet
Fri, 11 Jan 2013 16:30:56 +0100
changeset 50827 aba769dc82e9
parent 50388 a5b666e0c3c2
child 50840 a5cc092156da
permissions -rw-r--r--
updated MaSh Python component
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50222
40e3c3be6bca added file headers
blanchet
parents: 50220
diff changeset
     1
#     Title:      HOL/Tools/Sledgehammer/MaSh/src/readData.py
40e3c3be6bca added file headers
blanchet
parents: 50220
diff changeset
     2
#     Author:     Daniel Kuehlwein, ICIS, Radboud University Nijmegen
40e3c3be6bca added file headers
blanchet
parents: 50220
diff changeset
     3
#     Copyright   2012
40e3c3be6bca added file headers
blanchet
parents: 50220
diff changeset
     4
#
40e3c3be6bca added file headers
blanchet
parents: 50220
diff changeset
     5
# All functions to read the Isabelle output.
40e3c3be6bca added file headers
blanchet
parents: 50220
diff changeset
     6
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
     7
'''
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
     8
All functions to read the Isabelle output.
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
     9
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    10
Created on July 9, 2012
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    11
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    12
@author: Daniel Kuehlwein
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    13
'''
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    14
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    15
import sys,logging
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    16
50827
aba769dc82e9 updated MaSh Python component
blanchet
parents: 50388
diff changeset
    17
def create_feature_dict(nameIdDict,idNameDict,maxNameId,featureIdDict,maxFeatureId,featureCountDict,inputFile):
50388
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    18
    logger = logging.getLogger('create_feature_dict')
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    19
    featureDict = {}
50388
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    20
    IS = open(inputFile,'r')
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    21
    for line in IS:
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    22
        line = line.split(':')
50388
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    23
        name = line[0]
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    24
        # Name Id
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    25
        if nameIdDict.has_key(name):
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    26
            logger.warning('%s appears twice in the feature file. Aborting.',name)
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    27
            sys.exit(-1)
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    28
        else:
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    29
            nameIdDict[name] = maxNameId
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    30
            idNameDict[maxNameId] = name
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    31
            nameId = maxNameId
50388
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    32
            maxNameId += 1
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    33
        # Feature Ids
50388
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    34
        featureNames = [f.strip() for f in line[1].split()]
50827
aba769dc82e9 updated MaSh Python component
blanchet
parents: 50388
diff changeset
    35
        features = []        
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    36
        for fn in featureNames:
50827
aba769dc82e9 updated MaSh Python component
blanchet
parents: 50388
diff changeset
    37
            weight = 1.0
50388
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    38
            tmp = fn.split('=')
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    39
            if len(tmp) == 2:
50827
aba769dc82e9 updated MaSh Python component
blanchet
parents: 50388
diff changeset
    40
                fn = tmp[0]
aba769dc82e9 updated MaSh Python component
blanchet
parents: 50388
diff changeset
    41
                weight = float(tmp[1])
aba769dc82e9 updated MaSh Python component
blanchet
parents: 50388
diff changeset
    42
            if not featureIdDict.has_key(fn):
aba769dc82e9 updated MaSh Python component
blanchet
parents: 50388
diff changeset
    43
                featureIdDict[fn] = maxFeatureId
aba769dc82e9 updated MaSh Python component
blanchet
parents: 50388
diff changeset
    44
                featureCountDict[maxFeatureId] = 0
aba769dc82e9 updated MaSh Python component
blanchet
parents: 50388
diff changeset
    45
                maxFeatureId += 1
aba769dc82e9 updated MaSh Python component
blanchet
parents: 50388
diff changeset
    46
            fId = featureIdDict[fn]
aba769dc82e9 updated MaSh Python component
blanchet
parents: 50388
diff changeset
    47
            features.append((fId,weight))
aba769dc82e9 updated MaSh Python component
blanchet
parents: 50388
diff changeset
    48
            featureCountDict[fId] += 1
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    49
        # Store results
50388
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    50
        featureDict[nameId] = features
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    51
    IS.close()
50827
aba769dc82e9 updated MaSh Python component
blanchet
parents: 50388
diff changeset
    52
    return featureDict,maxNameId,maxFeatureId,featureCountDict
50388
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    53
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    54
def create_dependencies_dict(nameIdDict,inputFile):
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    55
    logger = logging.getLogger('create_dependencies_dict')
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    56
    dependenciesDict = {}
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    57
    IS = open(inputFile,'r')
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    58
    for line in IS:
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    59
        line = line.split(':')
50388
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    60
        name = line[0]
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    61
        # Name Id
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    62
        if not nameIdDict.has_key(name):
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    63
            logger.warning('%s is missing in nameIdDict. Aborting.',name)
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    64
            sys.exit(-1)
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    65
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    66
        nameId = nameIdDict[name]
50388
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    67
        dependenciesIds = [nameIdDict[f.strip()] for f in line[1].split()]
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    68
        # Store results, add p proves p
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    69
        dependenciesDict[nameId] = [nameId] + dependenciesIds
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    70
    IS.close()
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    71
    return dependenciesDict
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    72
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    73
def create_accessible_dict(nameIdDict,idNameDict,maxNameId,inputFile):
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    74
    logger = logging.getLogger('create_accessible_dict')
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    75
    accessibleDict = {}
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    76
    IS = open(inputFile,'r')
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    77
    for line in IS:
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    78
        line = line.split(':')
50388
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    79
        name = line[0]
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    80
        # Name Id
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    81
        if not nameIdDict.has_key(name):
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    82
            logger.warning('%s is missing in nameIdDict. Adding it as theory.',name)
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    83
            nameIdDict[name] = maxNameId
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    84
            idNameDict[maxNameId] = name
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    85
            nameId = maxNameId
50388
a5b666e0c3c2 added weights to MaSh (by Daniel Kuehlwein)
blanchet
parents: 50222
diff changeset
    86
            maxNameId += 1
50220
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    87
        else:
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    88
            nameId = nameIdDict[name]
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    89
        accessibleStrings = line[1].split()
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    90
        accessibleDict[nameId] = [nameIdDict[a.strip()] for a in accessibleStrings]
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    91
    IS.close()
90280d85cd03 moved MaSh's Python code into Isabelle
blanchet
parents:
diff changeset
    92
    return accessibleDict,maxNameId