OzoneAsai commited on
Commit
24153db
·
verified ·
1 Parent(s): a9ba32c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +64 -103
app.py CHANGED
@@ -1,105 +1,66 @@
1
- import streamlit as st
2
- import requests
3
-
4
- def main():
5
- st.title("集合操作アプリ")
6
-
7
- # メニューの選択
8
- option = st.sidebar.selectbox("機能を選択してください", ["集合の操作", "全体集合の生成", "補集合の計算", "不等式の計算"])
9
-
10
- if option == "集合の操作":
11
- set_operations()
12
- elif option == "全体集合の生成":
13
- generate_universe()
14
- elif option == "補集合の計算":
15
- complement_operation()
16
- elif option == "不等式の計算":
17
- inequality_solver()
18
-
19
- def set_operations():
20
- st.header("集合の操作")
21
-
22
- with st.form(key='set_operations_form'):
23
- set1 = st.text_input("集合1 (カンマ区切りで要素を入力してください)", "1,2,3")
24
- set2 = st.text_input("集合2 (カンマ区切りで要素を入力してください)", "3,4,5")
25
- set3 = st.text_input("集合3 (カンマ区切りで要素を入力してください)", "5,6,7")
26
- submit_button = st.form_submit_button(label='実行')
27
-
28
- if submit_button:
29
- response = requests.post("http://127.0.0.1:8000/set_operations", json={
30
- "set1": set1,
31
- "set2": set2,
32
- "set3": set3
33
- })
34
- if response.status_code == 200:
35
- result = response.json()
36
- st.subheader("集合の操作結果")
37
- st.write("和集合:", result["union"])
38
- st.write("積集合:", result["intersection"])
39
- st.write("差集合:", result["difference"])
40
- st.write("対称差:", result["symmetric_difference"])
41
- else:
42
- st.error(response.json()["detail"])
43
-
44
- def generate_universe():
45
- st.header("全体集合の生成")
46
-
47
- with st.form(key='generate_universe_form'):
48
- initial_value = st.number_input("初期値", value=0)
49
- step = st.number_input("ステップ", value=1)
50
- num_steps = st.number_input("回数", value=10, min_value=1)
51
- submit_button = st.form_submit_button(label='生成')
52
-
53
- if submit_button:
54
- response = requests.post("http://127.0.0.1:8000/generate_universe", json={
55
- "initial_value": initial_value,
56
- "step": step,
57
- "num_steps": num_steps
58
- })
59
- if response.status_code == 200:
60
- result = response.json()
61
- st.subheader("生成された全体集合")
62
- st.write(result["universe_set"])
63
- else:
64
- st.error(response.json()["detail"])
65
-
66
- def complement_operation():
67
- st.header("補集合の計算")
68
-
69
- with st.form(key='complement_operation_form'):
70
- universe = st.text_input("全体集合 (カンマ区切りで要素を入力してください)", "1,2,3,4,5,6,7,8,9,10")
71
- target_set = st.text_input("対象集合 (カンマ区切りで要素を入力してください)", "1,3,5")
72
- submit_button = st.form_submit_button(label='計算')
73
-
74
- if submit_button:
75
- response = requests.post("http://127.0.0.1:8000/complement_operation", json={
76
- "universe": universe,
77
- "target_set": target_set
78
- })
79
- if response.status_code == 200:
80
- result = response.json()
81
- st.subheader("補集合の計算結果")
82
- st.write(result["complement"])
83
- else:
84
- st.error(response.json()["detail"])
85
-
86
- def inequality_solver():
87
- st.header("不等式の計算")
88
-
89
- with st.form(key='inequality_solver_form'):
90
- inequality_input = st.text_input("不等式を入力してください", "2*x >= 2")
91
- submit_button = st.form_submit_button(label='解を求める')
92
-
93
- if submit_button:
94
- response = requests.post("http://127.0.0.1:8000/inequality_solver", json={
95
- "inequality": inequality_input
96
- })
97
- if response.status_code == 200:
98
- result = response.json()
99
- st.subheader("不等式の解")
100
- st.write(result["solution"])
101
- else:
102
- st.error(response.json()["detail"])
103
 
104
  if __name__ == "__main__":
105
- main()
 
 
1
+ from fastapi import FastAPI
2
+ from pydantic import BaseModel
3
+ from typing import List, Set
4
+
5
+ app = FastAPI()
6
+
7
+ class SetOperationInput(BaseModel):
8
+ set1: List[int]
9
+ set2: List[int]
10
+ set3: List[int]
11
+
12
+ class UniverseInput(BaseModel):
13
+ initial_value: int
14
+ step: int
15
+ num_steps: int
16
+
17
+ class ComplementInput(BaseModel):
18
+ universe: List[int]
19
+ target_set: List[int]
20
+
21
+ class InequalityInput(BaseModel):
22
+ inequality: str
23
+
24
+ @app.post("/set_operations/")
25
+ def set_operations(input_data: SetOperationInput):
26
+ set1 = set(input_data.set1)
27
+ set2 = set(input_data.set2)
28
+ set3 = set(input_data.set3)
29
+
30
+ result = {
31
+ "union": list(set1.union(set2, set3)),
32
+ "intersection": list(set1.intersection(set2, set3)),
33
+ "difference": list(set1.difference(set2, set3)),
34
+ "symmetric_difference": list(set1.symmetric_difference(set2))
35
+ }
36
+
37
+ return result
38
+
39
+ @app.post("/generate_universe/")
40
+ def generate_universe(input_data: UniverseInput):
41
+ initial_value = input_data.initial_value
42
+ step = input_data.step
43
+ num_steps = input_data.num_steps
44
+ universe_set = list(range(initial_value, initial_value + step * num_steps, step))
45
+
46
+ return {"universe": universe_set}
47
+
48
+ @app.post("/complement_operation/")
49
+ def complement_operation(input_data: ComplementInput):
50
+ universe_set = set(input_data.universe)
51
+ target_set = set(input_data.target_set)
52
+ complement = list(universe_set.difference(target_set))
53
+
54
+ return {"complement": complement}
55
+
56
+ @app.post("/inequality_solver/")
57
+ def inequality_solver(input_data: InequalityInput):
58
+ x = symbols('x')
59
+ inequality = eval(input_data.inequality)
60
+ solution = solve(inequality, x)
61
+
62
+ return {"solution": str(solution)}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
 
64
  if __name__ == "__main__":
65
+ import uvicorn
66
+ uvicorn.run(app, host="0.0.0.0", port=7860)