File size: 2,493 Bytes
a3c36fd
 
4207871
a3c36fd
b7541ec
 
4207871
e57f927
bc45490
 
 
 
 
 
 
b7541ec
 
 
 
 
 
 
bc45490
b7541ec
 
 
 
 
 
 
 
 
 
 
 
 
 
bc45490
a3c36fd
 
 
 
 
 
 
 
 
bc45490
 
 
e57f927
bc45490
 
 
 
 
 
 
 
 
b7541ec
 
 
 
e57f927
 
bc45490
 
 
 
 
edb4516
 
bc45490
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
edb4516
bc45490
 
4207871
bc45490
4207871
a3c36fd
bc45490
 
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import io
import gradio as gr
import os
import tempfile
import numpy as np
import pandas as pd


def greet(
    file_obj: tempfile._TemporaryFileWrapper,
    col_to_fit: str,
    niterations: int,
    binary_operators: list,
    unary_operators: list,
):
    empty_df = pd.DataFrame(
        {
            "equation": [],
            "loss": [],
            "complexity": [],
        }
    )
    if col_to_fit == "":
        return (
            empty_df,
            "Please enter a column to predict!",
        )
    if len(binary_operators) == 0 and len(unary_operators) == 0:
        return (
            empty_df,
            "Please select at least one operator!",
        )
    if file_obj is None:
        return (
            empty_df,
            "Please upload a CSV file!",
        )
    niterations = int(niterations)
    # Need to install PySR in separate python instance:
    os.system(
        """if [ ! -d "$HOME/.julia/environments/pysr-0.9.1" ]
    then
        python -c 'import pysr; pysr.install()'
    fi"""
    )
    from pysr import PySRRegressor

    df = pd.read_csv(file_obj.name)
    y = np.array(df[col_to_fit])
    X = df.drop([col_to_fit], axis=1)

    model = PySRRegressor(
        update=False,
        temp_equation_file=True,
        niterations=niterations,
        binary_operators=binary_operators,
        unary_operators=unary_operators,
    )
    model.fit(X, y)

    df = model.equations_[["equation", "loss", "complexity"]]
    # Convert all columns to string type:
    df = df.astype(str)
    return df, "Successful."


def main():
    demo = gr.Interface(
        fn=greet,
        description="A demo of PySR",
        inputs=[
            gr.File(label="Upload a CSV File"),
            gr.Textbox(label="Column to Predict", placeholder="y"),
            gr.Slider(
                minimum=1,
                maximum=1000,
                value=40,
                label="Number of iterations",
            ),
            gr.CheckboxGroup(
                choices=["+", "-", "*", "/", "^"],
                label="Binary Operators",
                value=["+", "-", "*", "/"],
            ),
            gr.CheckboxGroup(
                choices=["sin", "cos", "exp", "log"],
                label="Unary Operators",
                value=[],
            ),
        ],
        outputs=[gr.DataFrame(label="Equations"), gr.Textbox(label="Error Log")],
    )
    # Add file to the demo:

    demo.launch()


if __name__ == "__main__":
    main()