File size: 2,405 Bytes
f60fef5
3537d48
 
bd39949
3537d48
 
 
 
 
 
 
bd39949
0c9440e
bd39949
3537d48
 
 
bd39949
0ecdc68
 
 
 
 
 
 
3537d48
0ecdc68
 
3537d48
0ecdc68
 
 
 
3537d48
 
 
 
 
 
 
6fb64b4
a37b981
0ecdc68
 
3537d48
 
0ecdc68
 
3537d48
 
 
 
 
 
0ecdc68
6fb64b4
 
 
 
 
 
 
0ecdc68
6fb64b4
0ecdc68
 
 
0c9440e
0ecdc68
 
 
 
 
 
 
 
6fb64b4
3537d48
0c9440e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
from flask import Flask, request, render_template
import os
import json
import numpy as np
from Vit_concept import run_inference, model
from GP import genetic_programming

app = Flask(__name__)
UPLOAD_FOLDER = 'uploads'
os.makedirs(UPLOAD_FOLDER, exist_ok=True)

def tolist_safe(obj):
    return obj.tolist() if isinstance(obj, np.ndarray) else obj

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/upload', methods=['POST'])
def upload():
    if 'file' not in request.files:
        return "No file part"
    file = request.files['file']
    if file.filename == '':
        return "No selected file"

    filepath = os.path.join(UPLOAD_FOLDER, file.filename)
    file.save(filepath)

    with open(filepath, 'r') as f:
        data = json.load(f)

    # Collect training data and predict HLCs
    input_output_pairs = []
    predicted_HLCs = []
    for sample in data.get("train", []):
        input_grid = sample["input"]
        output_grid = sample["output"]
        concept_label, _ = run_inference(model, input_grid, output_grid)
        predicted_HLCs.append(concept_label)
        input_output_pairs.append((tolist_safe(input_grid), tolist_safe(output_grid)))
    predicted_HLCs = list(set(predicted_HLCs))

    # GP optimization
    best_program, generations = genetic_programming(
        input_output_pairs=input_output_pairs,
        population_size=200,
        generations=200,
        mutation_rate=0.2,
        crossover_rate=0.7,
        max_depth=3,
        predicted_HLCs=predicted_HLCs
    )

    # Evaluate GP program on test inputs
    test_pairs = []
    predicted_test_outputs = []
    for sample in data.get("test", []):
        test_input = tolist_safe(sample["input"])
        test_output = tolist_safe(sample["output"])
        test_pairs.append((test_input, test_output))
        try:
            pred = tolist_safe(best_program.evaluate(test_input))
        except Exception as e:
            print(f"Prediction error: {e}")
            pred = [["ERROR"]]
        predicted_test_outputs.append(pred)

    return render_template(
        "results.html",
        hlcs=predicted_HLCs,
        input_output_pairs=input_output_pairs,
        test_pairs=test_pairs,
        predicted_test_outputs=predicted_test_outputs,
        best_program=str(best_program)
    )

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=7860, debug=False)