Spaces:
Runtime error
Runtime error
hedtorresca
commited on
Update app.py
Browse files
app.py
CHANGED
@@ -1,19 +1,21 @@
|
|
1 |
import gradio as gr
|
2 |
import matplotlib.pyplot as plt
|
3 |
-
from
|
|
|
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 |
errors.append("A no puede ser menor que la suma de AB y AC menos ABC.")
|
11 |
if B < AB + BC - ABC:
|
12 |
errors.append("B no puede ser menor que la suma de AB y BC menos ABC.")
|
13 |
if C < AC + BC - ABC:
|
14 |
errors.append("C no puede ser menor que la suma de AC y BC menos ABC.")
|
15 |
-
if U < A + B + C - AB - AC - BC + ABC:
|
16 |
-
errors.append("El conjunto universal U es menor que la suma total de los conjuntos y sus intersecciones.")
|
17 |
return errors
|
18 |
|
19 |
def calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
|
@@ -56,8 +58,13 @@ def calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
|
|
56 |
return formatted_probs
|
57 |
|
58 |
def plot_venn(A, B, C, AB, AC, BC, ABC, U):
|
59 |
-
plt.figure(figsize=(
|
60 |
|
|
|
|
|
|
|
|
|
|
|
61 |
subsets = {
|
62 |
'100': A - AB - AC + ABC,
|
63 |
'010': B - AB - BC + ABC,
|
@@ -68,8 +75,13 @@ def plot_venn(A, B, C, AB, AC, BC, ABC, U):
|
|
68 |
'111': ABC
|
69 |
}
|
70 |
venn = venn3(subsets=subsets, set_labels=('A', 'B', 'C'))
|
71 |
-
venn_circles = venn3_circles(subsets=subsets, linewidth=1.0)
|
72 |
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
plt.title(f"Diagrama de Venn con U = {U}")
|
74 |
|
75 |
buf = BytesIO()
|
@@ -79,6 +91,7 @@ def plot_venn(A, B, C, AB, AC, BC, ABC, U):
|
|
79 |
return img
|
80 |
|
81 |
def suggest_intersections(A, B, C, AB, AC, BC, ABC, U):
|
|
|
82 |
max_AB = min(A, B, U - (A + B + C - AB - AC - BC + ABC))
|
83 |
max_AC = min(A, C, U - (A + B + C - AB - AC - BC + ABC))
|
84 |
max_BC = min(B, C, U - (A + B + C - AB - AC - BC + ABC))
|
@@ -97,20 +110,20 @@ def suggest_intersections(A, B, C, AB, AC, BC, ABC, U):
|
|
97 |
min_C = max(AC + BC - ABC, 0)
|
98 |
|
99 |
suggestions = {
|
100 |
-
"Máximo valor sugerido para A": max_A,
|
101 |
-
"Mínimo valor sugerido para A": min_A,
|
102 |
-
"Máximo valor sugerido para B": max_B,
|
103 |
-
"Mínimo valor sugerido para B": min_B,
|
104 |
-
"Máximo valor sugerido para C": max_C,
|
105 |
-
"Mínimo valor sugerido para C": min_C,
|
106 |
-
"Máximo valor sugerido para A ∩ B": max_AB,
|
107 |
-
"Mínimo valor sugerido para A ∩ B": min_AB,
|
108 |
-
"Máximo valor sugerido para A ∩ C": max_AC,
|
109 |
-
"Mínimo valor sugerido para A ∩ C": min_AC,
|
110 |
-
"Máximo valor sugerido para B ∩ C": max_BC,
|
111 |
-
"Mínimo valor sugerido para B ∩ C": min_BC,
|
112 |
-
"Máximo valor sugerido para A ∩ B ∩ C": max_ABC,
|
113 |
-
"Mínimo valor sugerido para A ∩ B ∩ C": min_ABC,
|
114 |
}
|
115 |
return suggestions
|
116 |
|
|
|
1 |
import gradio as gr
|
2 |
import matplotlib.pyplot as plt
|
3 |
+
from matplotlib.patches import Rectangle
|
4 |
+
from matplotlib_venn import venn3
|
5 |
from io import BytesIO
|
6 |
from PIL import Image
|
7 |
|
8 |
def validate_inputs(A, B, C, AB, AC, BC, ABC, U):
|
9 |
+
total_needed = A + B + C - AB - AC - BC + ABC
|
10 |
errors = []
|
11 |
+
if total_needed > U:
|
12 |
+
errors.append("El conjunto universal U debe ser mayor o igual a la suma de los subconjuntos y sus intersecciones.")
|
13 |
if A < AB + AC - ABC:
|
14 |
errors.append("A no puede ser menor que la suma de AB y AC menos ABC.")
|
15 |
if B < AB + BC - ABC:
|
16 |
errors.append("B no puede ser menor que la suma de AB y BC menos ABC.")
|
17 |
if C < AC + BC - ABC:
|
18 |
errors.append("C no puede ser menor que la suma de AC y BC menos ABC.")
|
|
|
|
|
19 |
return errors
|
20 |
|
21 |
def calculate_probabilities(A, B, C, AB, AC, BC, ABC, U):
|
|
|
58 |
return formatted_probs
|
59 |
|
60 |
def plot_venn(A, B, C, AB, AC, BC, ABC, U):
|
61 |
+
plt.figure(figsize=(8, 8))
|
62 |
|
63 |
+
# Dibujar el conjunto universal como un rectángulo
|
64 |
+
ax = plt.gca()
|
65 |
+
ax.add_patch(Rectangle((0, 0), 1, 1, fill=None, edgecolor='black', linewidth=2))
|
66 |
+
|
67 |
+
# Dibujar el diagrama de Venn
|
68 |
subsets = {
|
69 |
'100': A - AB - AC + ABC,
|
70 |
'010': B - AB - BC + ABC,
|
|
|
75 |
'111': ABC
|
76 |
}
|
77 |
venn = venn3(subsets=subsets, set_labels=('A', 'B', 'C'))
|
|
|
78 |
|
79 |
+
# Mostrar la cantidad fuera de A, B y C si no coincide con U
|
80 |
+
suma_subconjuntos = A + B + C - AB - AC - BC + ABC
|
81 |
+
if U > suma_subconjuntos:
|
82 |
+
faltante = U - suma_subconjuntos
|
83 |
+
plt.text(0.5, 0.9, f"Fuera de A, B y C: {faltante}", horizontalalignment='center', fontsize=12, bbox=dict(facecolor='white', alpha=0.5))
|
84 |
+
|
85 |
plt.title(f"Diagrama de Venn con U = {U}")
|
86 |
|
87 |
buf = BytesIO()
|
|
|
91 |
return img
|
92 |
|
93 |
def suggest_intersections(A, B, C, AB, AC, BC, ABC, U):
|
94 |
+
# Ajuste de los valores sugeridos para que sean realistas y no negativos
|
95 |
max_AB = min(A, B, U - (A + B + C - AB - AC - BC + ABC))
|
96 |
max_AC = min(A, C, U - (A + B + C - AB - AC - BC + ABC))
|
97 |
max_BC = min(B, C, U - (A + B + C - AB - AC - BC + ABC))
|
|
|
110 |
min_C = max(AC + BC - ABC, 0)
|
111 |
|
112 |
suggestions = {
|
113 |
+
"Máximo valor sugerido para A": max(0, max_A),
|
114 |
+
"Mínimo valor sugerido para A": max(0, min_A),
|
115 |
+
"Máximo valor sugerido para B": max(0, max_B),
|
116 |
+
"Mínimo valor sugerido para B": max(0, min_B),
|
117 |
+
"Máximo valor sugerido para C": max(0, max_C),
|
118 |
+
"Mínimo valor sugerido para C": max(0, min_C),
|
119 |
+
"Máximo valor sugerido para A ∩ B": max(0, max_AB),
|
120 |
+
"Mínimo valor sugerido para A ∩ B": max(0, min_AB),
|
121 |
+
"Máximo valor sugerido para A ∩ C": max(0, max_AC),
|
122 |
+
"Mínimo valor sugerido para A ∩ C": max(0, min_AC),
|
123 |
+
"Máximo valor sugerido para B ∩ C": max(0, max_BC),
|
124 |
+
"Mínimo valor sugerido para B ∩ C": max(0, min_BC),
|
125 |
+
"Máximo valor sugerido para A ∩ B ∩ C": max(0, max_ABC),
|
126 |
+
"Mínimo valor sugerido para A ∩ B ∩ C": max(0, min_ABC),
|
127 |
}
|
128 |
return suggestions
|
129 |
|