Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
@@ -4,8 +4,20 @@ from matplotlib_venn import venn3
|
|
4 |
from io import BytesIO
|
5 |
from PIL import Image
|
6 |
|
7 |
-
def
|
8 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
if total == 0:
|
10 |
return {
|
11 |
"P(A)": 0,
|
@@ -17,23 +29,25 @@ def calculate_probabilities(A, B, C, AB, AC, BC, ABC):
|
|
17 |
"P(A ∩ B ∩ C)": 0,
|
18 |
}
|
19 |
|
20 |
-
P_A = A / total
|
21 |
-
P_B = B / total
|
22 |
-
P_C = C / total
|
23 |
-
P_AB = AB / total
|
24 |
-
P_AC = AC / total
|
25 |
-
P_BC = BC / total
|
26 |
-
P_ABC = ABC / total
|
27 |
|
28 |
-
|
29 |
-
"P(A)": P_A,
|
30 |
-
"P(B)": P_B,
|
31 |
-
"P(C)": P_C,
|
32 |
-
"P(A ∩ B)": P_AB,
|
33 |
-
"P(A ∩ C)": P_AC,
|
34 |
-
"P(B ∩ C)": P_BC,
|
35 |
-
"P(A ∩ B ∩ C)": P_ABC,
|
36 |
}
|
|
|
|
|
37 |
|
38 |
def plot_venn(A, B, C, AB, AC, BC, ABC):
|
39 |
plt.figure(figsize=(8, 8))
|
@@ -46,9 +60,13 @@ def plot_venn(A, B, C, AB, AC, BC, ABC):
|
|
46 |
img = Image.open(buf)
|
47 |
return img
|
48 |
|
49 |
-
def main(A, B, C, AB, AC, BC, ABC):
|
|
|
|
|
|
|
|
|
50 |
venn_diagram = plot_venn(A, B, C, AB, AC, BC, ABC)
|
51 |
-
probabilities = calculate_probabilities(A, B, C, AB, AC, BC, ABC)
|
52 |
return venn_diagram, probabilities
|
53 |
|
54 |
iface = gr.Interface(
|
@@ -60,12 +78,14 @@ iface = gr.Interface(
|
|
60 |
gr.Number(label="Cantidad en A ∩ B"),
|
61 |
gr.Number(label="Cantidad en A ∩ C"),
|
62 |
gr.Number(label="Cantidad en B ∩ C"),
|
63 |
-
gr.Number(label="Cantidad en A ∩ B ∩ C")
|
|
|
64 |
],
|
65 |
outputs=[
|
66 |
gr.Image(type="pil", label="Diagrama de Venn"),
|
67 |
gr.JSON(label="Probabilidades Calculadas")
|
68 |
-
]
|
|
|
69 |
)
|
70 |
|
71 |
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:
|
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):
|
20 |
+
total = U if U > 0 else (A + B + C - AB - AC - BC + ABC)
|
21 |
if total == 0:
|
22 |
return {
|
23 |
"P(A)": 0,
|
|
|
29 |
"P(A ∩ B ∩ C)": 0,
|
30 |
}
|
31 |
|
32 |
+
P_A = A / total
|
33 |
+
P_B = B / total
|
34 |
+
P_C = C / total
|
35 |
+
P_AB = AB / total
|
36 |
+
P_AC = AC / total
|
37 |
+
P_BC = BC / total
|
38 |
+
P_ABC = ABC / total
|
39 |
|
40 |
+
formatted_probs = {
|
41 |
+
"P(A)": f"{P_A:.2%} ({A}/{total})",
|
42 |
+
"P(B)": f"{P_B:.2%} ({B}/{total})",
|
43 |
+
"P(C)": f"{P_C:.2%} ({C}/{total})",
|
44 |
+
"P(A ∩ B)": f"{P_AB:.2%} ({AB}/{total})",
|
45 |
+
"P(A ∩ C)": f"{P_AC:.2%} ({AC}/{total})",
|
46 |
+
"P(B ∩ C)": f"{P_BC:.2%} ({BC}/{total})",
|
47 |
+
"P(A ∩ B ∩ C)": f"{P_ABC:.2%} ({ABC}/{total})",
|
48 |
}
|
49 |
+
|
50 |
+
return formatted_probs
|
51 |
|
52 |
def plot_venn(A, B, C, AB, AC, BC, ABC):
|
53 |
plt.figure(figsize=(8, 8))
|
|
|
60 |
img = Image.open(buf)
|
61 |
return img
|
62 |
|
63 |
+
def main(A, B, C, AB, AC, BC, ABC, U):
|
64 |
+
errors = validate_inputs(A, B, C, AB, AC, BC, ABC, U)
|
65 |
+
if errors:
|
66 |
+
return None, {"error": "\n".join(errors)}
|
67 |
+
|
68 |
venn_diagram = plot_venn(A, B, C, AB, AC, BC, ABC)
|
69 |
+
probabilities = calculate_probabilities(A, B, C, AB, AC, BC, ABC, U)
|
70 |
return venn_diagram, probabilities
|
71 |
|
72 |
iface = gr.Interface(
|
|
|
78 |
gr.Number(label="Cantidad en A ∩ B"),
|
79 |
gr.Number(label="Cantidad en A ∩ C"),
|
80 |
gr.Number(label="Cantidad en B ∩ C"),
|
81 |
+
gr.Number(label="Cantidad en A ∩ B ∩ C"),
|
82 |
+
gr.Number(label="Conjunto Universal (U)")
|
83 |
],
|
84 |
outputs=[
|
85 |
gr.Image(type="pil", label="Diagrama de Venn"),
|
86 |
gr.JSON(label="Probabilidades Calculadas")
|
87 |
+
],
|
88 |
+
live=True
|
89 |
)
|
90 |
|
91 |
iface.launch()
|