Static Analyzer for Solidity
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
slither/utils/similarity/plot.py

63 lines
1.7 KiB

6 years ago
import logging
import sys
import traceback
import operator
import numpy as np
import random
from sklearn import decomposition
import matplotlib.pyplot as plt
from fastText import load_model
from .cache import load_cache
logger = logging.getLogger("crytic-pred")
def plot(args):
try:
model = args.model
model = load_model(model)
filename = args.filename
contract = args.contract
fname = args.fname
solc = args.solc
infile = args.input
ext = args.filter
if contract is None or fname is None or infile is None:
logger.error('The plot mode requieres contract, fname and input parameters.')
sys.exit(-1)
cache = load_cache(infile, model, ext=ext, solc=solc)
#save_cache("cache.npz", cache)
data = list()
fs = list()
for (f,c,n),y in cache.items():
if c == contract and n == fname:
fs.append(f)
data.append(y)
#r[x] = similarity(fvector, y)
data = np.array(data)
pca = decomposition.PCA(n_components=2)
tdata = pca.fit_transform(data)
plt.figure()
assert(len(tdata) == len(fs))
for ([x,y],l) in zip(tdata, fs):
x = random.gauss(0, 0.01) + x
y = random.gauss(0, 0.01) + y
plt.scatter(x, y, c='blue')
plt.text(x-0.001,y+0.001, l.split("_")[1].replace(".sol.ast.compact.json",""))
plt.show()
#r = sorted(r.items(), key=operator.itemgetter(1), reverse=True)
#for x,score in r[:10]:
except Exception:
logger.error('Error in %s' % args.filename)
logger.error(traceback.format_exc())
sys.exit(-1)