File size: 2,742 Bytes
e0d0f44
 
02a59bc
e15f060
f1f85ae
ff0096b
e0d0f44
d401e08
e0d0f44
 
 
 
d401e08
e0d0f44
 
0c3b8f9
 
 
e0d0f44
 
 
d74ff22
 
 
 
0c3b8f9
e15f060
 
 
 
 
 
 
 
 
d401e08
ff0096b
e15f060
2020bbe
d401e08
 
 
 
 
 
 
 
 
 
875d1be
 
 
f1f85ae
e15f060
875d1be
f1f85ae
0c3b8f9
f1f85ae
0c3b8f9
 
e15f060
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
import pandas as pd
import numpy as np
import plotly
import plotly.graph_objs as go
import gradio as gr
import json

def plot_usage_volume(system1, users1, timeline1, system2, users2, timeline2, system3, users3, timeline3):
    # Create empty dataframe to hold usage data
    data = pd.DataFrame(columns=["System", "Month", "Usage"])

    # Generate usage data for each system based on typical rollout behaviors
    for i, system in enumerate([system1, system2, system3]):
        # Calculate the monthly usage volume based on the estimated number of users and timeline
        usage = np.concatenate([
            np.linspace(0, [users1, users2, users3][i], int([timeline1, timeline2, timeline3][i] * 0.25)),
            np.linspace([users1, users2, users3][i] * 0.5, [users1, users2, users3][i], int([timeline1, timeline2, timeline3][i] * 0.5)),
            np.linspace([users1, users2, users3][i], [users1, users2, users3][i] * 0.75, int([timeline1, timeline2, timeline3][i] * 0.25))
        ])

        # Add the usage data to the dataframe
        months = ["Month {}".format(j) for j in range(1, len(usage) + 1)]
        system_data = pd.DataFrame({"System": [system] * len(usage), "Month": months, "Usage": usage})
        data = pd.concat([data, system_data], axis=0)

    # Create a line plot of the usage volume for each system
    fig = go.Figure()
    for system in data["System"].unique():
        system_data = data[data["System"] == system]
        fig.add_trace(go.Scatter(x=system_data["Month"], y=system_data["Usage"], mode="lines+markers", name=system))

    fig.update_layout(title="System Rollout Usage Volume Plot", xaxis_title="Month", yaxis_title="Usage")

    # Convert the plot to a JSON string
    plot_json = json.dumps(fig, cls=plotly.utils.PlotlyJSONEncoder)

    # Return the plot as a Gradio output
    return plot_json

# Define the input components
inputs = [
    gr.inputs.Textbox(label="System 1 Name", default="System1"),
    gr.inputs.Number(label="System 1 Users", default=1000),
    gr.inputs.Number(label="System 1 Timeline (months)", default=12),
    gr.inputs.Textbox(label="System 2 Name", default="System2"),
    gr.inputs.Number(label="System 2 Users", default=500),
    gr.inputs.Number(label="System 2 Timeline (months)", default=18),
    gr.inputs.Textbox(label="System 3 Name", default="System3"),
    gr.inputs.Number(label="System 3 Users", default=2000),
    gr.inputs.Number(label="System 3 Timeline (months)", default=24)
]

# Define the output component
output = gr.outputs.Plot(label="Usage Volume Plot")

# Create the interface
iface = gr.Interface(fn=plot_usage_volume, inputs=inputs, outputs=output, title="System Rollout Usage Volume Plot")

# Launch the interface
iface.launch()