hedtorresca commited on
Commit
f04f86a
·
verified ·
1 Parent(s): fbae019

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -0
app.py CHANGED
@@ -17,16 +17,19 @@ def validate_inputs(A, B, C, AB, AC, BC, ABC, U):
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,4 +90,45 @@ def calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
87
 
88
  def plot_venn(A, B, C, AB, AC, BC, ABC, U):
89
  plt.figure(figsize=(8, 8))
 
 
90
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  return errors
18
 
19
  def suggest_intersections(A, B, C, U):
20
+ # Máximos valores permitidos para las intersecciones
21
  max_AB = min(A, B, U - (A + B + C - A - B))
22
  max_AC = min(A, C, U - (A + B + C - A - C))
23
  max_BC = min(B, C, U - (A + B + C - B - C))
24
  max_ABC = min(max_AB, max_AC, max_BC)
25
 
26
+ # Mínimos valores permitidos para las intersecciones
27
  min_AB = max(0, A + B - U)
28
  min_AC = max(0, A + C - U)
29
  min_BC = max(0, B + C - U)
30
  min_ABC = max(0, A + B + C - U)
31
 
32
+ # Máximos y mínimos valores permitidos para los conjuntos
33
  max_A = U - (B + C - BC)
34
  max_B = U - (A + C - AC)
35
  max_C = U - (A + B - AB)
 
90
 
91
  def plot_venn(A, B, C, AB, AC, BC, ABC, U):
92
  plt.figure(figsize=(8, 8))
93
+ venn = venn3(subsets=(A, B, AB, C, AC, BC, ABC), set_labels=('A', 'B', 'C'))
94
+ plt.title(f"Diagrama de Venn con U = {U}")
95
 
96
+ buf = BytesIO()
97
+ plt.savefig(buf, format='png')
98
+ buf.seek(0)
99
+ img = Image.open(buf)
100
+ return img
101
+
102
+ def main(A, B, C, AB, AC, BC, ABC, U):
103
+ if U == 0:
104
+ U = A + B + C
105
+
106
+ errors = validate_inputs(A, B, C, AB, AC, BC, ABC, U)
107
+ suggestions = suggest_intersections(A, B, C, U)
108
+ if errors:
109
+ return None, {"error": "\n".join(errors), "sugerencias": suggestions}
110
+
111
+ venn_diagram = plot_venn(A, B, C, AB, AC, BC, ABC, U)
112
+ probabilities = calculate_probabilities(A, B, C, AB, AC, BC, ABC, U)
113
+ return venn_diagram, probabilities
114
+
115
+ iface = gr.Interface(
116
+ fn=main,
117
+ inputs=[
118
+ gr.Number(label="Conjunto Universal (U)", value=0),
119
+ gr.Number(label="Cantidad en A"),
120
+ gr.Number(label="Cantidad en B"),
121
+ gr.Number(label="Cantidad en C"),
122
+ gr.Number(label="Cantidad en A ∩ B"),
123
+ gr.Number(label="Cantidad en A ∩ C"),
124
+ gr.Number(label="Cantidad en B ∩ C"),
125
+ gr.Number(label="Cantidad en A ∩ B ∩ C")
126
+ ],
127
+ outputs=[
128
+ gr.Image(type="pil", label="Diagrama de Venn"),
129
+ gr.JSON(label="Resultados y Sugerencias")
130
+ ],
131
+ live=True
132
+ )
133
+
134
+ iface.launch()