mirror of https://github.com/crytic/slither
parent
d8d7938813
commit
0978700a50
@ -0,0 +1,62 @@ |
||||
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) |
Loading…
Reference in new issue