hedtorresca commited on
Commit
2baf94a
·
verified ·
1 Parent(s): 8dc9bcf

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -19
app.py CHANGED
@@ -1,19 +1,21 @@
1
  import gradio as gr
2
  import matplotlib.pyplot as plt
3
- from matplotlib_venn import venn3, venn3_circles
 
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=(10, 10))
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