File size: 2,271 Bytes
f60fef5
3537d48
 
bd39949
3537d48
 
 
 
 
 
 
bd39949
0c9440e
bd39949
3537d48
 
 
bd39949
2f1b584
 
 
 
 
 
 
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
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('/submit_json', methods=['POST'])
def submit_json():
    try:
        raw_json = request.form.get('json_input')
        data = json.loads(raw_json)
    except Exception as e:
        return f"Invalid JSON input: {e}"

    # 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)