hedtorresca commited on
Commit
886690d
·
verified ·
1 Parent(s): 5f704da

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +0 -150
app.py CHANGED
@@ -4,15 +4,6 @@ from matplotlib_venn import venn3
4
  from io import BytesIO
5
  from PIL import Image
6
 
7
- def validate_inputs(A, B, C, AB, AC, BC, ABC, U):
8
- errors = []
9
- if A < AB + AC - ABC:
10
- errorimport gradio as gr
11
- import matplotlib.pyplot as plt
12
- from matplotlib_venn import venn3
13
- from io import BytesIO
14
- from PIL import Image
15
-
16
  def validate_inputs(A, B, C, AB, AC, BC, ABC, U):
17
  errors = []
18
  if A < AB + AC - ABC:
@@ -26,19 +17,16 @@ def validate_inputs(A, B, C, AB, AC, BC, ABC, U):
26
  return errors
27
 
28
  def suggest_intersections(A, B, C, U):
29
- # Máximos valores permitidos para las intersecciones
30
  max_AB = min(A, B, U - (A + B + C - A - B))
31
  max_AC = min(A, C, U - (A + B + C - A - C))
32
  max_BC = min(B, C, U - (A + B + C - B - C))
33
  max_ABC = min(max_AB, max_AC, max_BC)
34
 
35
- # Mínimos valores permitidos para las intersecciones
36
  min_AB = max(0, A + B - U)
37
  min_AC = max(0, A + C - U)
38
  min_BC = max(0, B + C - U)
39
  min_ABC = max(0, A + B + C - U)
40
 
41
- # Máximos y mínimos valores permitidos para los conjuntos
42
  max_A = U - (B + C - BC)
43
  max_B = U - (A + C - AC)
44
  max_C = U - (A + B - AB)
@@ -99,142 +87,4 @@ def calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
99
 
100
  def plot_venn(A, B, C, AB, AC, BC, ABC, U):
101
  plt.figure(figsize=(8, 8))
102
- venn = venn3(subsets=(A, B, AB, C, AC, BC, ABC), set_labels=('A', 'B', 'C'))
103
- plt.title(f"Diagrama de Venn con U = {U}")
104
 
105
- buf = BytesIO()
106
- plt.savefig(buf, format='png')
107
- buf.seek(0)
108
- img = Image.open(buf)
109
- return img
110
-
111
- def main(A, B, C, AB, AC, BC, ABC, U):
112
- if U == 0:
113
- U = A + B + C # Asumir U si no se especifica
114
-
115
- errors = validate_inputs(A, B, C, AB, AC, BC, ABC, U)
116
- suggestions = suggest_intersections(A, B, C, U)
117
- if errors:
118
- return None, {"error": "\n".join(errors), "sugerencias": suggestions}
119
-
120
- venn_diagram = plot_venn(A, B, C, AB, AC, BC, ABC, U)
121
- probabilities = calculate_probabilities(A, B, C, AB, AC, BC, ABC, U)
122
- return venn_diagram, probabilities
123
-
124
- iface = gr.Interface(
125
- fn=main,
126
- inputs=[
127
- gr.Number(label="Conjunto Universal (U)"),
128
- gr.Number(label="Cantidad en A"),
129
- gr.Number(label="Cantidad en B"),
130
- gr.Number(label="Cantidad en C"),
131
- gr.Number(label="Cantidad en A ∩ B"),
132
- gr.Number(label="Cantidad en A ∩ C"),
133
- gr.Number(label="Cantidad en B ∩ C"),
134
- gr.Number(label="Cantidad en A ∩ B ∩ C")
135
- ],
136
- outputs=[
137
- gr.Image(type="pil", label="Diagrama de Venn"),
138
- gr.JSON(label="Resultados y Sugerencias")
139
- ],
140
- live=True
141
- )
142
-
143
- iface.launch()
144
- s.append("A no puede ser menor que la suma de AB y AC menos ABC.")
145
- if B < AB + BC - ABC:
146
- errors.append("B no puede ser menor que la suma de AB y BC menos ABC.")
147
- if C < AC + BC - ABC:
148
- errors.append("C no puede ser menor que la suma de AC y BC menos ABC.")
149
- if U < A + B + C - AB - AC - BC + ABC:
150
- errors.append("El conjunto universal U es menor que la suma total de los conjuntos y sus intersecciones.")
151
- return errors
152
-
153
- def suggest_intersections(A, B, C, U):
154
- max_AB = min(A, B, U - (A + B + C - A - B))
155
- max_AC = min(A, C, U - (A + B + C - A - C))
156
- max_BC = min(B, C, U - (A + B + C - B - C))
157
- max_ABC = min(max_AB, max_AC, max_BC)
158
-
159
- suggestions = {
160
- "Máximo valor sugerido para A ∩ B": max_AB,
161
- "Máximo valor sugerido para A ∩ C": max_AC,
162
- "Máximo valor sugerido para B ∩ C": max_BC,
163
- "Máximo valor sugerido para A ∩ B ∩ C": max_ABC,
164
- }
165
- return suggestions
166
-
167
- def calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
168
- total = U if U > 0 else (A + B + C - AB - AC - BC + ABC)
169
- if total == 0:
170
- return {
171
- "P(A)": 0,
172
- "P(B)": 0,
173
- "P(C)": 0,
174
- "P(A ∩ B)": 0,
175
- "P(A ∩ C)": 0,
176
- "P(B ∩ C)": 0,
177
- "P(A ∩ B ∩ C)": 0,
178
- }
179
-
180
- P_A = A / total
181
- P_B = B / total
182
- P_C = C / total
183
- P_AB = AB / total
184
- P_AC = AC / total
185
- P_BC = BC / total
186
- P_ABC = ABC / total
187
-
188
- formatted_probs = {
189
- "P(A)": f"{P_A:.2%} ({A}/{total})",
190
- "P(B)": f"{P_B:.2%} ({B}/{total})",
191
- "P(C)": f"{P_C:.2%} ({C}/{total})",
192
- "P(A ∩ B)": f"{P_AB:.2%} ({AB}/{total})",
193
- "P(A ∩ C)": f"{P_AC:.2%} ({AC}/{total})",
194
- "P(B ∩ C)": f"{P_BC:.2%} ({BC}/{total})",
195
- "P(A ∩ B ∩ C)": f"{P_ABC:.2%} ({ABC}/{total})",
196
- }
197
-
198
- return formatted_probs
199
-
200
- def plot_venn(A, B, C, AB, AC, BC, ABC):
201
- plt.figure(figsize=(8, 8))
202
- venn = venn3(subsets=(A, B, AB, C, AC, BC, ABC), set_labels=('A', 'B', 'C'))
203
- plt.title("Venn Diagram")
204
-
205
- buf = BytesIO()
206
- plt.savefig(buf, format='png')
207
- buf.seek(0)
208
- img = Image.open(buf)
209
- return img
210
-
211
- def main(A, B, C, AB, AC, BC, ABC, U):
212
- errors = validate_inputs(A, B, C, AB, AC, BC, ABC, U)
213
- if errors:
214
- suggestions = suggest_intersections(A, B, C, U)
215
- return None, {"error": "\n".join(errors), "sugerencias": suggestions}
216
-
217
- venn_diagram = plot_venn(A, B, C, AB, AC, BC, ABC)
218
- probabilities = calculate_probabilities(A, B, C, AB, AC, BC, ABC, U)
219
- return venn_diagram, probabilities
220
-
221
- iface = gr.Interface(
222
- fn=main,
223
- inputs=[
224
- gr.Number(label="Cantidad en A"),
225
- gr.Number(label="Cantidad en B"),
226
- gr.Number(label="Cantidad en C"),
227
- gr.Number(label="Cantidad en A ∩ B"),
228
- gr.Number(label="Cantidad en A ∩ C"),
229
- gr.Number(label="Cantidad en B ∩ C"),
230
- gr.Number(label="Cantidad en A ∩ B ∩ C"),
231
- gr.Number(label="Conjunto Universal (U)")
232
- ],
233
- outputs=[
234
- gr.Image(type="pil", label="Diagrama de Venn"),
235
- gr.JSON(label="Resultados")
236
- ],
237
- live=True
238
- )
239
-
240
- iface.launch()
 
4
  from io import BytesIO
5
  from PIL import Image
6
 
 
 
 
 
 
 
 
 
 
7
  def validate_inputs(A, B, C, AB, AC, BC, ABC, U):
8
  errors = []
9
  if A < AB + AC - ABC:
 
17
  return errors
18
 
19
  def suggest_intersections(A, B, C, U):
 
20
  max_AB = min(A, B, U - (A + B + C - A - B))
21
  max_AC = min(A, C, U - (A + B + C - A - C))
22
  max_BC = min(B, C, U - (A + B + C - B - C))
23
  max_ABC = min(max_AB, max_AC, max_BC)
24
 
 
25
  min_AB = max(0, A + B - U)
26
  min_AC = max(0, A + C - U)
27
  min_BC = max(0, B + C - U)
28
  min_ABC = max(0, A + B + C - U)
29
 
 
30
  max_A = U - (B + C - BC)
31
  max_B = U - (A + C - AC)
32
  max_C = U - (A + B - AB)
 
87
 
88
  def plot_venn(A, B, C, AB, AC, BC, ABC, U):
89
  plt.figure(figsize=(8, 8))
 
 
90