Objetivo del proyecto: Desarrollar, versionar y
desplegar una aplicación web multipágina en Streamlit que utilice
SymPy para resolver estática estructural, calcular
reacciones en apoyos y generar automáticamente los diagramas de Fuerza
Cortante V(x) y Momento Flector M(x) de vigas
isostáticas.
Instrucciones de uso para el estudiante: Copia y
pega cada Prompt en el orden indicado. Espera la respuesta,
implementa el código en VSCode, ejecuta
streamlit run app.py para probar, haz commit a GitHub y
solo entonces avanza al siguiente prompt. Si aparece un error, copia el
Traceback completo y pide corrección antes de
continuar.
(Descargas, instalación y preparación de VSCode)
Prompt 0.1:
Actúa como un Ingeniero de Software Senior y mentor técnico. Soy estudiante de Ingeniería Civil y necesito configurar mi equipo Windows/macOS desde cero para desarrollar una app en Streamlit con cálculo simbólico. Guíame paso a paso para: 1) Instalar Python 3.10+ (marcando agregar al PATH). 2) Instalar VSCode y las extensiones obligatorias: Python, Pylance, GitLens, Streamlit y Jupyter. 3) Instalar Git y configurar usuario/correo en terminal. 4) Verificar cada instalación con comandos exactos. Entregame solo los pasos claros, sin información redundante.
(Repositorio, archivos base y organización multipágina)
Prompt 1.1:
Voy a crear un repositorio local llamado “AnalisisEstructural_Civil”. Guíame con los comandos exactos de terminal para: 1) Crear la carpeta del proyecto y entrar a ella. 2) Inicializar Git y vincularlo a un nuevo repositorio remoto en GitHub (déjame el placeholder para la URL). 3) Crear la estructura de archivos y carpetas requerida por Streamlit multipágina: app.py, backend_estructural.py, requirements.txt, .gitignore (optimizado para Python y VSCode), README.md, y una carpeta pages/ con dos archivos vacíos: 1_Calculo_Reacciones.py y 2_Diagramas_Cortante_Momento.py. 4) Hacer el primer commit inicial y subirlo a GitHub. Dame los comandos uno por uno con explicación breve.
(Módulo Python reutilizable con
continuum_mechanics)
Prompt 2.1:
Actúa como un Ingeniero Civil experto en Estática Computacional y Python. Necesito crear backend_estructural.py que encapsule la lógica de SymPy para vigas simplemente apoyadas. Genera el código completo con type hints, docstrings y validaciones para:
- crear_viga_simbolica(L: float, carga_puntual_P: float, x_P: float, carga_distribuida_w: float) -> sp.physics.continuum_mechanics.Beam
- Usa sp.symbols(‘E I’) para propiedades.
- Aplica reacciones en x=0 y x=L con apply_load(…, -1).
- Aplica P en x_P y w desde 0 hasta L con apply_load(…, 0, end=L).
- Define bc_deflection en [(0,0), (L,0)] y ejecuta solve_for_reaction_loads(). Retorna el objeto viga.
- extraer_ecuaciones_internas(viga) -> dict[str, sp.Expr]
- Retorna {‘Vx’: viga.shear_force(), ‘Mx’: viga.bending_moment()}.
- generar_datos_plot(viga, x_max: float, n_puntos: int = 200) -> tuple[np.ndarray, np.ndarray, np.ndarray]
- Usa sp.lambdify para convertir V(x) y M(x) en funciones numéricas.
- Retorna arrays x, V, M listos para Matplotlib. Maneja casos donde la expresión sea constante.
Incluye un bloque if name == “main”: con prueba: L=6m, P=20kN en x=3m, w=5kN/m. Imprime reacciones y verifica que ΣFy=0.`
(Interfaz gráfica, navegación y visualización técnica)
Prompt 3.1 (Página Principal):
Programa app.py. Crea una página de bienvenida profesional para mi app “Analizador Estructural con SymPy”. Usa Streamlit para mostrar: 1) Título y subtítulo con st.title y st.markdown. 2) Explicación técnica del propósito (2 párrafos sobre estática computacional). 3) Barra lateral (st.sidebar) con st.page_link para navegar a las páginas de cálculo. 4) Un st.info con el estado del proyecto. Diseño limpio, colores institucionales y comentarios en español.
Prompt 3.2 (Página 1 - Reacciones):
Programa pages/1_Calculo_Reacciones.py. Debe importar backend_estructural.py. Crea inputs con st.number_input: Longitud Viga (m), Carga Puntual P (kN), Posición de P (m), Carga Distribuida w (kN/m). Valida que posición < longitud. Al presionar “Calcular Reacciones”, ejecuta la función del backend y muestra en st.columns tres st.metric: R_A (kN), R_B (kN) y ΣFy (verificación de equilibrio). Usa st.latex() para mostrar las ecuaciones simbólicas de equilibrio resueltas. Si hay error, muéstralo con st.error.
Prompt 3.3 (Página 2 - Diagramas):
Programa pages/2_Diagramas_Cortante_Momento.py. Debe importar backend_estructural.py y reutilizar los mismos inputs (o recuperarlos con st.session_state). Al calcular, usa generar_datos_plot() para obtener arrays x, V, M. Genera dos subplots con matplotlib: 1) Diagrama de Fuerza Cortante V(x) (línea roja, relleno bajo curva). 2) Diagrama de Momento Flector M(x) (línea azul, relleno bajo curva). Añade grid, ejes etiquetados en kN y kN·m, y una línea vertical punteada donde V(x) cruza por cero. Renderiza con st.pyplot(fig). Agrega st.expander(“📘 Fundamento Teórico”) explicando la relación integral/derivada entre q(x), V(x) y M(x), y por qué el momento máximo ocurre cuando V=0.
(Entorno virtual, requisitos y publicación)
Prompt 4.1:
Guíame para preparar el proyecto para despliegue. 1) Comandos para crear y activar un entorno virtual .venv en VSCode (Windows/macOS). 2) Instrucciones para instalar streamlit, sympy, matplotlib y numpy solo en ese entorno. 3) Comando exacto para generar requirements.txt automáticamente. 4) Secuencia de Git para commit y push a main. 5) Pasos detallados para desplegar en Streamlit Community Cloud (repo, rama, main file). Asegúrate de mencionar que SymPy y Matplotlib deben estar explícitamente en requirements.txt para que el servidor los instale.
Prompt 4.2 (Optimización Final para Rúbrica):
Revisa mentalmente la rúbrica de mi proyecto final: Lógica Matemática (30%), Interactividad/Frontend (20%), Visualización Gráfica (20%), Ingeniería de Software/Despliegue (10%) y Sustentación (20%). Sugiere 3 mejoras concretas en mi código actual para asegurar la máxima puntuación. Dame los fragmentos de código exactos para: 1) Envolver los inputs en st.form() para evitar recálculos innecesarios. 2) Formatear ejes y leyendas de Matplotlib con estilo profesional (font size, grid alpha, units). 3) Estructura de README.md orientada a sustentación (teoría, instalación, uso, limitaciones del modelo isostático).
| Criterio | Verificación en la App |
|---|---|
| ✅ Lógica y Precisión Matemática (30%) | backend_estructural.py usa SymPy
correctamente. Reacciones verifican ΣFy=0 y
ΣM=0. Sin errores de tipo o dominio. Manejo de cargas
puntuales y distribuidas según apply_load(). |
| ✅ Interactividad y Diseño (20%) | Navegación multipágina fluida. Uso de st.sidebar,
st.columns, st.metric, st.form().
Inputs validados y botón de cálculo intuitivo. |
| ✅ Visualización Gráfica (20%) | Diagramas V(x) y M(x) generados con
Matplotlib, ejes etiquetados, unidades técnicas, línea
vertical en V=0 resaltada. Renderizado estable en
st.pyplot(). |
| ✅ Ingeniería de Software (10%) | Repo en GitHub con .venv ignorado,
requirements.txt exacto (sympy,
matplotlib, streamlit, numpy),
.gitignore completo, README.md profesional.
URL pública activa. |
| ✅ Sustentación y Dominio (20%) | Estudiante puede explicar: diferencia entre cálculo simbólico vs
numérico, significado físico de apply_load(orden), relación
dM/dx = V, y cómo la app acelera el pre-dimensionamiento
estructural. |
💡 Nota pedagógica para tu clase:
Esta guía está diseñada para que los estudiantes internalicen el flujo profesional:
Entorno → Backend Simbólico → Frontend Interactivo → Despliegue.
Se recomienda encarecidamente que no avancen al siguiente prompt sin haber ejecutado y hecho commit del anterior.
Esto refuerza la disciplina de control de versiones y reduce la frustración ante errores acumulados.
Durante la sustentación, cuiden su capacidad para conectar la salida visual de la app con los conceptos de Estática y Resistencia de Materiales que ya han visto en su malla curricular.