{"id":782,"date":"2026-07-30T12:21:41","date_gmt":"2026-07-30T12:21:41","guid":{"rendered":"https:\/\/matforge.org\/?p=782","raw":"https:\/\/matforge.org\/?p=782"},"modified":"2026-07-30T12:21:41","modified_gmt":"2026-07-30T12:21:41","slug":"reproducible-publication-practices-simulation-results","status":"publish","type":"post","link":"https:\/\/matforge.org\/es\/reproducible-publication-practices-simulation-results\/","title":{"rendered":"Pr\u00e1cticas de publicaci\u00f3n reproducibles para los resultados de la simulaci\u00f3n: El marco de los cinco pilares","raw":"Pr\u00e1cticas de publicaci\u00f3n reproducibles para los resultados de la simulaci\u00f3n: El marco de los cinco pilares"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 14<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span><ul>\n<li>Los cuadernos de Jupyter se ejecutan con \u00e9xito solo ~12,4% del tiempo cuando se declaran las dependencias: la gesti\u00f3n de entornos expl\u00edcitas cierra esta brecha<\/li>\n<li>El marco de los cinco pilares de Ziemann et al. (2023) proporciona una l\u00ednea de base estructurada para documentaci\u00f3n, control de versiones, gesti\u00f3n del entorno, intercambio de datos y cumplimiento justo<\/li>\n<li>La lista de verificaci\u00f3n de REPRO (Hornung et al., 2026) ofrece una pr\u00e1ctica herramienta de autoauditor\u00eda que cubre la estructura de carpetas, la especificaci\u00f3n del entorno, la disponibilidad de datos y la ejecuci\u00f3n determinista<\/li>\n<li>Las trampas comunes como rutas absolutas, dependencias inespec\u00edficas y readmes faltantes son las principales causas de fallas de reproducibilidad en la investigaci\u00f3n computacional<\/li>\n<li>Un flujo de trabajo paso a paso desde el dise\u00f1o de simulaci\u00f3n a trav\u00e9s de la documentaci\u00f3n del cuaderno, el archivo de c\u00f3digo y el env\u00edo de diarios proporciona una canalizaci\u00f3n de producci\u00f3n repetible<\/li>\n<\/ul>\n<h2>La brecha de reproducibilidad en la investigaci\u00f3n computacional<\/h2>\n<p>Cuando env\u00eda un documento basado en simulaci\u00f3n, los revisores verifican su metodolog\u00eda, las condiciones de los l\u00edmites, los estudios de convergencia y la comparaci\u00f3n con los puntos de referencia anal\u00edticos. Pero rara vez vuelven a ejecutar su c\u00f3digo. Los resultados presentados en sus figuras y tablas se convierten en el registro publicado, y si esos resultados fueron generados por un flujo de trabajo que no se puede reproducir, la publicaci\u00f3n descansa sobre una base no verificada.<\/p>\n<p>Este no es un problema te\u00f3rico. Samuel &amp; Mietchen (2024) analiz\u00f3 15.817 Jupyter cuadernos basados en Python de publicaciones biom\u00e9dicas indexadas en PubMed Central. De los cuadernos donde todas las dependencias declaradas pudieron instalarse con \u00e9xito, <strong>87.6% result\u00f3 en excepciones<\/strong> durante la repetici\u00f3n autom\u00e1tica. Solo 1203 port\u00e1tiles se completaron sin errores, y de ellos, 324 produjeron resultados que difer\u00edan de los resultados informados originalmente. Los 879 port\u00e1tiles restantes produjeron resultados id\u00e9nticos. Esta tasa de \u00e9xito del 5,56% para la reproducci\u00f3n id\u00e9ntica fue en realidad una mejora con respecto a la ejecuci\u00f3n inicial de 2021 (5,88%), lo que indica que los cuadernos recientes tienden a ser marginalmente mejores, pero la brecha sigue siendo enorme.<\/p>\n<p>\u00bfQu\u00e9 hace que la reproducibilidad sea m\u00e1s dif\u00edcil para los cient\u00edficos computacionales? Trabaja con solucionadores num\u00e9ricos, refinamientos de malla, esquemas de integraci\u00f3n de tiempo y estrategias de acoplamiento que producen resultados a trav\u00e9s de cadenas de operaciones de punto flotante. Un solo golpe de versi\u00f3n de Python, un par\u00e1metro predeterminado modificado en <code>numpy<\/code> o <code>scipy<\/code>, o una ruta relativa que no se resuelva en otra m\u00e1quina puede invalidar todas las figuras y tablas de su papel. El problema se agrava cuando su flujo de trabajo implica el refinamiento de malla adaptable, t\u00e9rminos de origen personalizados o condiciones de contorno no triviales, el tipo de patrones avanzados documentados en <a href=\"\/how-fipy-handles-meshes-and-grid-structures\/\">recursos fipy en este sitio<\/a>.<\/p>\n<h2>Cinco pilares de investigaci\u00f3n computacional reproducible<\/h2>\n<p>Ziemann et al. (2023) formalizaron los <strong>cinco pilares de la reproducibilidad computacional<\/strong> como marco para documentar y compartir flujos de trabajo reproducibles. Si bien se desarrollaron originalmente en el contexto de la bioinform\u00e1tica, estos pilares se aplican por igual a las simulaciones de ciencia de materiales, la din\u00e1mica de fluidos computacional y los solucionadores de PDE basados en vol\u00famenes finitos.<\/p>\n<h3>1. Programaci\u00f3n alfabetizada<\/h3>\n<p>La programaci\u00f3n alfabetizada significa documentar su flujo de trabajo computacional como una narrativa que intercala explicaci\u00f3n y c\u00f3digo ejecutable. En las ciencias computacionales, esto generalmente se manifiesta como cuadernos de Jupyter, documentos de Markdown o scripts de Python con extensos docStrings y comentarios en l\u00ednea.<\/p>\n<p>El objetivo no es simplemente producir un archivo reproducible, sino crear un documento que un lector que no est\u00e9 familiarizado con su an\u00e1lisis pueda seguir, comprender y volver a ejecutar. Samuel &amp; Mietchen (2024) encontr\u00f3 una clara correlaci\u00f3n entre la relaci\u00f3n <strong>reducci\u00f3n a celda de c\u00f3digo<\/strong> y una reproducci\u00f3n exitosa: los cuadernos con mayor esfuerzo de documentaci\u00f3n (m\u00e1s celdas de Markdown en relaci\u00f3n con las celdas de c\u00f3digo) ten\u00edan significativamente m\u00e1s probabilidades de reproducirse de manera id\u00e9ntica a la salida original.<\/p>\n<p>Para una simulaci\u00f3n de campo de fase en fipy\u2014<a href=\"\/understanding-fipys-core-architecture\/\">una introducci\u00f3n a su arquitectura central<\/a>\u2014o un modelo de difusi\u00f3n utilizando el m\u00e9todo de <a href=\"\/finite-volume-method-explained-simply\/\">volumen finito<\/a>, la programaci\u00f3n alfabetizada podr\u00eda verse as\u00ed:<\/p>\n<pre><code class=\"language-python\"># Set deterministic seed\nimport numpy as np\nnp.random.seed(42)\n\n# Build a structured grid (this should match the mesh description in your paper)\nnx, ny = 100, 100\nmesh = CellGrid([nx, ny], varIndex=1)\n\n# Define the transient diffusion term and boundary conditions\nT = CellVariable(name='Temperature', mesh=mesh, value=initial_temperature)\neqn = TransientTerm() == DiffusionTerm(coeff=thermal_conductivity)\n\n# Impose Dirichlet boundary conditions (see also our guide on FiPy BCs)\nT.fixLeft(value=300)\nT.fixRight(value=500)\n<\/code><\/pre>\n<p>Cuando escribe esta celda de cuaderno, est\u00e1 documentando simult\u00e1neamente la resoluci\u00f3n de la malla, la PDE y las condiciones de los l\u00edmites, y ejecutando la simulaci\u00f3n que produjo la figura publicada.<\/p>\n<p><strong>Recomendaci\u00f3n:<\/strong> Si su cuaderno tiene menos celdas de rebajas que las celdas de c\u00f3digo, est\u00e1 subdocumentado. Apunta a al menos una proporci\u00f3n de 1:1, e idealmente m\u00e1s. El Samuel &amp; El estudio de Mietchen encontr\u00f3 que el grupo de reproducci\u00f3n id\u00e9ntica ten\u00eda una relaci\u00f3n de reducci\u00f3n a c\u00f3digo de 0,73, mientras que el grupo de reproducci\u00f3n diferente ten\u00eda solo 0,49.<\/p>\n<h3>2. Control de versiones de c\u00f3digo y uso compartido<\/h3>\n<p>El control de versiones no es opcional para el trabajo de publicaci\u00f3n. Git proporciona un historial permanente y consultable de cada cambio de c\u00f3digo, y GitHub, GitLab o Zenodo archiva su repositorio como un objeto citable con un DOI.<\/p>\n<p>El prop\u00f3sito del control de versiones es doble:<\/p>\n<ul>\n<li><strong>Reproducibilidad:<\/strong> Un hash de confirmaci\u00f3n espec\u00edfico (<code>abc1234<\/code>) emparejado con una fecha de confirmaci\u00f3n espec\u00edfica le dice a cualquiera exactamente qu\u00e9 c\u00f3digo produjo sus resultados publicados.<\/li>\n<li><strong>Responsabilidad:<\/strong> Cada cambio de par\u00e1metro, cada modificaci\u00f3n de t\u00e9rmino fuente, se registra cada edici\u00f3n de condici\u00f3n de l\u00edmite. Cuando un revisor pregunta \u00ab\u00bfpor qu\u00e9 us\u00f3 este coeficiente de difusi\u00f3n?\u00bb Puede se\u00f1alar el compromiso exacto donde se estableci\u00f3.<\/li>\n<\/ul>\n<p>Al publicar, archive su repositorio en <a href=\"https:\/\/zenodo.org\/\" rel=\"nofollow\">zenodo<\/a> (o github con la integraci\u00f3n de Zenodo habilitada) e incluya el DOI en la disponibilidad de datos de su manuscrito Declaraci\u00f3n. Esto convierte su c\u00f3digo de simulaci\u00f3n en un artefacto permanente y citable. Muchas revistas ahora recomiendan depositar el c\u00f3digo en los repositorios con la asignaci\u00f3n de DOI: consulte el <a href=\"https:\/\/joss.theoj.org\/papers\/tagged\/simulation%20science\" rel=\"nofollow\">Joss Simulation Science Directrices<\/a> para las expectativas de las revistas sobre publicaciones basadas en simulaci\u00f3n.<\/p>\n<p><strong>Regla de decisi\u00f3n: \u00bfGithub vs. Zenodo?<\/strong> Usar GitHub para el desarrollo activo y la colaboraci\u00f3n. Usa zenodo para archivo. Zenodo asigna autom\u00e1ticamente un DOI a los repositorios de GitHub cuando se vincula, por lo que es la opci\u00f3n preferida para la publicaci\u00f3n. Puede mantener un repositorio de GitHub en vivo y archivar la confirmaci\u00f3n final en Zenodo para su env\u00edo.<\/p>\n<h3>3. Control de entorno de c\u00e1lculo<\/h3>\n<p>El control del medio ambiente es la intervenci\u00f3n t\u00e9cnica m\u00e1s importante que puede realizar. Cuando un revisor intenta reproducir sus resultados en una m\u00e1quina nueva, necesita conocer la pila de software exacta: versi\u00f3n de Python, versi\u00f3n de Numpy, versi\u00f3n de Fipy, bibliotecas de Solver. Sin esta informaci\u00f3n, el revisor est\u00e1 adivinando, y adivinando produce <code>ModuleNotFoundError<\/code>, <code>ImportError<\/code> y <code>FileNotFoundError<\/code> (las tres excepciones m\u00e1s comunes identificadas por Samuel &amp; Mietchen, responsables del 41,65% de toda ejecuci\u00f3n fracasos).<\/p>\n<p><strong>C\u00f3mo capturar tu entorno:<\/strong><\/p>\n<pre><code class=\"language-python\"># In Python, use the session-info package to export your environment\n!pip install session-info\nimport session_info\nsession_info.show()\n<\/code><\/pre>\n<pre><code class=\"language-bash\"># Conda environment export (alternative)\nconda env export &gt; environment.yml\n<\/code><\/pre>\n<pre><code class=\"language-bash\"># pip requirements (for simpler projects)\npip freeze &gt; requirements.txt\n<\/code><\/pre>\n<p><strong>Regla de decisi\u00f3n: \u00bfConda vs. PIP vs. Docker?<\/strong> Para la mayor\u00eda de los flujos de trabajo de ciencia computacional en Python, Conda es el mejor equilibrio de practicidad e integridad. Maneja tanto los paquetes de Python como las dependencias que no son de Python (como bibliotecas HDF5 o MPI Runtimes). Docker proporciona aislamiento total a costa de la complejidad; Use Docker cuando necesite compartir un flujo de trabajo con investigadores en diferentes sistemas operativos que no puedan instalar Conda o cuando su flujo de trabajo depende de bibliotecas a nivel de sistema.<\/p>\n<p>La lista de verificaci\u00f3n REPRO (Hornung et al., 2026) recomienda expl\u00edcitamente especificar versiones de software en el archivo L\u00e9ame y proporcionar un archivo de especificaci\u00f3n de entorno. Ellos se\u00f1alan: \u00abPara la reproducibilidad a largo plazo, el entorno del software tambi\u00e9n debe estar claramente documentado, incluidas las versiones de todos los paquetes adicionales utilizados\u00bb.<\/p>\n<h3>4. Intercambio de datos persistente<\/h3>\n<p>El intercambio de datos va de la mano con el uso compartido de c\u00f3digo. Sus salidas de simulaci\u00f3n (configuraciones de malla, matrices de campo, series de tiempo de variables) deben depositarse en un repositorio que asigna un identificador persistente (DOI).<\/p>\n<p>Para los datos de simulaci\u00f3n, esto normalmente significa:<\/p>\n<ul>\n<li><strong>Salidas de simulaci\u00f3n RAW<\/strong> (matrices de campo, archivos de malla, series temporales) depositadas junto con el c\u00f3digo<\/li>\n<li><strong>Resultados intermedios<\/strong> para simulaciones computacionalmente intensivas (consulte la recomendaci\u00f3n de Repro Checklist sobre resultados intermedios)<\/li>\n<li><strong>Datos de prueba sint\u00e9tico<\/strong> Si sus datos reales no pueden compartirse p\u00fablicamente debido a la privacidad o restricciones legales<\/li>\n<\/ul>\n<p>Los Principios de la Feria (Wilkinson et al., 2016) proporcionan un marco para la gesti\u00f3n de datos, consulte <a href=\"https:\/\/www.go-fair.org\/fair-principles\/\" rel=\"nofollow\">La gu\u00eda GO FAIR SOBRE EL Principios<\/a> para la orientaci\u00f3n oficial sobre la capacidad de b\u00fasqueda, accesibilidad, interoperabilidad y reutilizaci\u00f3n.<\/p>\n<ul>\n<li><strong>Findable:<\/strong> Asigne identificadores persistentes (DOI) e incluya metadatos enriquecidos<\/li>\n<li><strong>Accesible:<\/strong> Almacene datos en repositorios con protocolos abiertos (Zenodo, FigShare, Facilidad de datos de materiales)<\/li>\n<li><strong>Interoperable:<\/strong> Use formatos est\u00e1ndar (HDF5, netCDF, JSON) y vocabularios formales<\/li>\n<li><strong>Reutilizable:<\/strong> Documente la procedencia, la concesi\u00f3n de licencias y las tarjetas de datos<\/li>\n<\/ul>\n<p>Para la ciencia de los materiales y la f\u00edsica computacional, plataformas como <a href=\"https:\/\/www.materialscloud.org\/\" rel=\"nofollow\">cloud de materiales<\/a> y la <a href=\"https:\/\/nomad-lab.eu\/nomad-lab\/\" rel=\"nofollow\">nomad repository<\/a> Proporciona una infraestructura compatible con los datos de simulaci\u00f3n, completa con esquemas de metadatos y acceso a la API.<\/p>\n<h3>5. Documentaci\u00f3n<\/h3>\n<p>La lista de verificaci\u00f3n de repro pone un gran \u00e9nfasis en la documentaci\u00f3n, no como una ocurrencia tard\u00eda, sino como un componente estructural del trabajo reproducible. Un archivo L\u00e9ame debe:<\/p>\n<ul>\n<li>Enumere todos los archivos del repositorio y su prop\u00f3sito<\/li>\n<li>Especifique el orden de ejecuci\u00f3n exacto (qu\u00e9 scripts producen qu\u00e9 figuras o tablas)<\/li>\n<li>Proporcionar tiempos de ejecuci\u00f3n aproximados y requisitos de hardware<\/li>\n<li>Refiera los n\u00fameros de figura y tabla correspondientes de la publicaci\u00f3n<\/li>\n<\/ul>\n<p>Para los flujos de trabajo de simulaci\u00f3n, la documentaci\u00f3n tambi\u00e9n significa documentar sus m\u00e9todos num\u00e9ricos. Cuando escribes un solucionador personalizado o un script FIPy con la divisi\u00f3n del operador, <a href=\"https:\/\/matforge.org\/operator-splitting-strang-splitting-and-imex-schemes-for-pde-solvers\/\">strang Esquemas de divisi\u00f3n y IMEX para los solucionadores de PDE<\/a>, debe documentar:<\/p>\n<ul>\n<li>El esquema de discretizaci\u00f3n<\/li>\n<li>El m\u00e9todo de integraci\u00f3n del tiempo<\/li>\n<li>Las tolerancias del solucionador<\/li>\n<li>Los criterios de convergencia<\/li>\n<\/ul>\n<p>Si otro investigador no puede entender el m\u00e9todo num\u00e9rico detr\u00e1s de sus resultados, no puede evaluar si los resultados son v\u00e1lidos o reproducirlos en un solucionador diferente.<\/p>\n<h2>La lista de verificaci\u00f3n de reproducci\u00f3n como una herramienta de autoauditor\u00eda<\/h2>\n<p>La Repro Checklist (Hornung et al., 2026), publicada en <em>Royal Society Open Science<\/em> (<a href=\"https:\/\/royalsocietypublishing.org\/rsos\/article\/13\/6\/252489\/482007\/Overcoming-barriers-to-computational\" rel=\"nofollow\">full paper<\/a>), fue desarrollada por un consorcio internacional de editores de reproducibilidad de revistas para proporcionar un Marco procesable para la investigaci\u00f3n reproducible. Si bien se aplica ampliamente en todas las disciplinas, varios elementos son particularmente relevantes para el trabajo de simulaci\u00f3n computacional.<\/p>\n<p>A continuaci\u00f3n se explica c\u00f3mo utilizar la lista de verificaci\u00f3n de Repro como una autoauditor\u00eda previa a la presentaci\u00f3n:<\/p>\n<h3>A. Estructura y L\u00e9ame<\/h3>\n<p><strong>Check:<\/strong> \u00bfTiene un directorio <code>data\/<\/code>, <code>code\/<\/code> y <code>results\/<\/code> (o <code>output\/<\/code>)? \u00bfSu archivo L\u00e9ame enumera todos los archivos, especifica el orden de ejecuci\u00f3n y hace referencia a las figuras correspondientes de cada script?<\/p>\n<p><strong>Falla com\u00fan:<\/strong> Los investigadores organizan su c\u00f3digo de simulaci\u00f3n en una sola carpeta sin estructura. Un archivo L\u00e9ame a menudo se omite por completo. Sin un readme, un revisor no tiene forma de saber qu\u00e9 script produce qu\u00e9 figura, y puede ejecutar los scripts en el orden incorrecto, produciendo resultados completamente diferentes.<\/p>\n<h3>B. Especificaci\u00f3n del medio ambiente<\/h3>\n<p><strong>Check:<\/strong> \u00bfSe incluye su <code>environment.yml<\/code> o <code>requirements.txt<\/code> en el archivo? \u00bfSe especifican expl\u00edcitamente las versiones de Python y Package?<\/p>\n<p><strong>Falla com\u00fan:<\/strong> La raz\u00f3n m\u00e1s com\u00fan de los cuadernos fallan son las dependencias o en conflicto. Samuel &amp; Mietchen descubri\u00f3 que el 34,32% de los port\u00e1tiles fallaron en el paso de instalaci\u00f3n de dependencias, aunque ninguno de los archivos estaba mal formado. La causa ra\u00edz a menudo son las versiones de paquetes no especificadas o desactualizadas.<\/p>\n<h3>C. Disponibilidad de datos<\/h3>\n<p><strong>Comprobar:<\/strong> \u00bfPuede un revisor ejecutar su c\u00f3digo desde cero usando los datos proporcionados? Si no puede compartir datos reales, \u00bfha incluido datos sint\u00e9ticos que imitan la estructura computacional?<\/p>\n<p><strong>Falla com\u00fan:<\/strong> Cuando los datos reales no se pueden compartir (debido a restricciones legales, \u00e9ticas o institucionales), el c\u00f3digo a\u00fan debe ser ejecutable con datos sint\u00e9ticos. La lista de comprobaci\u00f3n de Repro recomienda generar datos sint\u00e9ticos usando paquetes como <code>synthpop<\/code> o <code>simdata<\/code> en R, o <code>numpy.random<\/code> en Python.<\/p>\n<h3>D. Ejecuci\u00f3n determinista<\/h3>\n<p><strong>Comprobar:<\/strong> \u00bfSe establecen expl\u00edcitamente las semillas del generador de n\u00fameros aleatorios? Para simulaciones en paralelo, \u00bfse utilizan flujos de n\u00fameros aleatorios reproducibles?<\/p>\n<p><strong>Falla com\u00fan:<\/strong> Esta es una de las causas m\u00e1s comunes y sutiles de irreproducibilidad. Una simulaci\u00f3n que usa <code>numpy.random.randn()<\/code> sin establecer una semilla producir\u00e1 resultados diferentes en cada ejecuci\u00f3n, e incluso con una semilla, los trabajadores paralelos pueden generar flujos aleatorios superpuestos. La lista de verificaci\u00f3n de Repro recomienda usar la generaci\u00f3n basada en <code>SeedSequence<\/code> basada en Numpy para flujos aleatorios deterministas y seguros en paralelo.<\/p>\n<pre><code class=\"language-python\">from numpy.random import default_rng\nrng = default_rng(42)  # Fixed seed\n<\/code><\/pre>\n<p>Para simulaciones en paralelo, use <code>numpy.random.SeedSequence<\/code> para generar flujos independientes y reproducibles:<\/p>\n<pre><code class=\"language-python\">from numpy.random import SeedSequence\nseq = SeedSequence(42)\nchildren = seq.spawn(n_children)  # Deterministic per-child seeds\n<\/code><\/pre>\n<h3>E. Resultados intermedios<\/h3>\n<p><strong>Comprobar:<\/strong> Para simulaciones computacionalmente intensivas (p. ej., barridos de par\u00e1metros, estudios de Monte Carlo), \u00bfse guardan los resultados intermedios para que los revisores puedan reproducir cifras espec\u00edficas sin volver a ejecutar el an\u00e1lisis completo?<\/p>\n<p><strong>Falla com\u00fan:<\/strong> Cuando una simulaci\u00f3n tarda horas o d\u00edas en ejecutarse, los revisores no pueden volver a ejecutarla desde cero. La lista de verificaci\u00f3n de Repro recomienda guardar resultados intermedios (salida sin procesar antes de la generaci\u00f3n de cifras finales) para que los revisores puedan verificar r\u00e1pidamente los resultados espec\u00edficos. Esto es especialmente importante para los estudios de simulaci\u00f3n con replicaciones paralelas.<\/p>\n<h2>Flujo de trabajo paso a paso desde el dise\u00f1o de simulaci\u00f3n hasta la presentaci\u00f3n<\/h2>\n<p>Esta secci\u00f3n proporciona un flujo de trabajo concreto que integra los cinco pilares y la lista de verificaci\u00f3n de Repro en una canalizaci\u00f3n de producci\u00f3n repetible.<\/p>\n<h3>Fase 1: Dise\u00f1o de simulaci\u00f3n y organizaci\u00f3n de c\u00f3digos<\/h3>\n<ol>\n<li><strong>Crear la estructura del proyecto:<\/strong><\/li>\n<\/ol>\n<pre><code>project\/\n\u251c\u2500\u2500 README.md\n\u251c\u2500\u2500 environment.yml\n\u251c\u2500\u2500 data\/\n\u2502   \u251c\u2500\u2500 input\/         # Simulation inputs, initial conditions\n\u2502   \u251c\u2500\u2500 output\/        # Raw simulation outputs\n\u2502   \u2514\u2500\u2500 synthetic\/     # Synthetic test data (if real data is restricted)\n\u251c\u2500\u2500 code\/\n\u2502   \u251c\u2500\u2500 mesh.py        # Mesh configuration\n\u2502   \u251c\u2500\u2500 solve.py       # Main simulation script\n\u2502   \u251c\u2500\u2500 postprocess.py # Figure generation\n\u2502   \u2514\u2500\u2500 test\/          # Unit tests and convergence checks\n\u2514\u2500\u2500 results\/\n    \u251c\u2500\u2500 figures\/\n    \u2514\u2500\u2500 tables\/\n<\/code><\/pre>\n<ol start=\"2\">\n<li><strong>Control de versiones:<\/strong> Inicialice el repositorio y confirme la estructura.<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">git init\ngit add README.md environment.yml\ngit commit -m \"Initial project structure\"\n<\/code><\/pre>\n<h3>Fase 2: Ejecuci\u00f3n de simulaci\u00f3n y documentaci\u00f3n<\/h3>\n<ol start=\"3\">\n<li><strong>Escriba la simulaci\u00f3n en un formato alfabetizado.<\/strong> Use cuadernos de Jupyter o archivos de secuencias de comandos con comentarios extensos. Documente cada m\u00e9todo num\u00e9rico, cada elecci\u00f3n de solucionador, cada condici\u00f3n de l\u00edmite.<\/li>\n<li><strong>Configurar semillas deterministas.<\/strong> Incluya <code>np.random.seed(42)<\/code> (o una configuraci\u00f3n de <code>SeedSequence<\/code> m\u00e1s sofisticada para ejecutar en paralelo) en la parte superior de cada script.<\/li>\n<li><strong>Capturar el entorno.<\/strong> Ejecutar <code>session_info.show()<\/code> o <code>conda env export<\/code> durante una ejecuci\u00f3n exitosa e incluir la salida en el L\u00e9ame.<\/li>\n<li><strong>Guardar resultados intermedios.<\/strong> Si su simulaci\u00f3n es intensiva computacionalmente, guarde las salidas sin procesar en los puntos de control para que los revisores puedan verificar cifras espec\u00edficas sin volver a ejecutar todo.<\/li>\n<\/ol>\n<h3>Fase 3: Validaci\u00f3n y Verificaci\u00f3n<\/h3>\n<ol start=\"7\">\n<li><strong>Ejecute estudios de convergencia.<\/strong> Verifique que sus resultados convergen como se espera mientras refina la malla. Esto es parte de la verificaci\u00f3n, verificando que la soluci\u00f3n num\u00e9rica se acerque a la soluci\u00f3n exacta a medida que disminuyen los par\u00e1metros de discretizaci\u00f3n. Para obtener un marco pr\u00e1ctico, consulte nuestra gu\u00eda sobre <a href=\"\/validation-and-verification-for-pde-simulations-practical-framework\/\">validaci\u00f3n y verificaci\u00f3n de simulaciones PDE<\/a>.<\/li>\n<li><strong>Escriba las pruebas unitarias.<\/strong> Pruebe las funciones individuales, las condiciones de contorno y los solucionadores. Si est\u00e1 utilizando Fipy, esto puede incluir probar que los valores de <code>CellVariable<\/code> se inicializan correctamente o que <code>DiffusionTerm<\/code> se discretiza correctamente. Consulte nuestro art\u00edculo sobre <a href=\"https:\/\/matforge.org\/python-testing-patterns-for-scientific-code-beyond-pytest-basics\/\">Patrones de prueba para c\u00f3digo cient\u00edfico<\/a> para obtener m\u00e1s detalles.<\/li>\n<\/ol>\n<h3>Fase 4: Archivado y Presentaci\u00f3n<\/h3>\n<ol start=\"9\">\n<li><strong>Archivo en Zenodo.<\/strong> Empuje el compromiso final a GitHub y vinc\u00falelo a Zenodo para la asignaci\u00f3n de DOI.<\/li>\n<li><strong>Ejecutar la auditor\u00eda de la lista de verificaci\u00f3n de Repro:<\/strong>\n<ul>\n<li>Archivo L\u00e9ame con la orden de ejecuci\u00f3n?<\/li>\n<li>Especificaci\u00f3n del medio ambiente \u00bfIncluido?<\/li>\n<li>Datos disponibles (reales o sint\u00e9ticos)?<\/li>\n<li>\u00bfSeries deterministas?<\/li>\n<li>\u00bfResultados intermedios guardados?<\/li>\n<\/ul>\n<\/li>\n<li><strong>Env\u00ede con el c\u00f3digo y los datos doi<\/strong> en la declaraci\u00f3n de disponibilidad de datos de su manuscrito. Muchas revistas ahora requieren esto en la presentaci\u00f3n o revisi\u00f3n.<\/li>\n<\/ol>\n<h2>Trampas comunes y c\u00f3mo evitarlas<\/h2>\n<h3>Escolar 1: Caminos Absolutos<\/h3>\n<p>El uso de rutas absolutas como <code>\/home\/user\/simulations\/output\/data.csv<\/code> en su c\u00f3digo rompe la reproducibilidad en cualquier m\u00e1quina que no sea la que desarroll\u00f3 el proyecto.<\/p>\n<p><strong>fix:<\/strong> Utilice rutas relativas de la ra\u00edz del proyecto. Si sus scripts esperan datos en un directorio <code>data\/<\/code>, consulte <code>data\/input.csv<\/code> independientemente de d\u00f3nde se clone el proyecto.<\/p>\n<h3>Escoma 2: Dependencias no programadas<\/h3>\n<p>Un cuaderno importa <code>scipy.stats<\/code> pero no declara que se requiere <code>scipy<\/code>. Cuando otro investigador ejecuta el cuaderno, es posible que tenga una versi\u00f3n incompatible <code>scipy<\/code>, o la pierda por completo.<\/p>\n<p><strong>FIX:<\/strong> Incluya siempre un <code>requirements.txt<\/code> o <code>environment.yml<\/code> y verif\u00edquelo eliminando el entorno local y reinstal\u00e1ndolo desde cero antes de archivar.<\/p>\n<h3>Escollo 3: L\u00e9ame faltante<\/h3>\n<p>Sin un L\u00e9ame, los revisores no pueden saber:<\/p>\n<ul>\n<li>\u00bfQu\u00e9 gui\u00f3n produce qu\u00e9 figura<\/li>\n<li>Qu\u00e9 scripts de orden deben ejecutarse<\/li>\n<li>Qu\u00e9 tiempo de ejecuci\u00f3n aproximado esperar<\/li>\n<li>Qu\u00e9 versi\u00f3n de Python o versiones de paquete se utilizaron<\/li>\n<\/ul>\n<p><strong>Fix:<\/strong> Escriba un archivo README que enumere todos los archivos, cada paso de ejecuci\u00f3n y cada estimaci\u00f3n de tiempo de ejecuci\u00f3n. Haga referencia a los n\u00fameros de figura de su publicaci\u00f3n.<\/p>\n<h3>Escoma 4: deriva de la versi\u00f3n de Python<\/h3>\n<p>Python 3.6 fue el atardecer en 2021; Python 3.7 se puso en la puesta del sol en junio de 2023. Muchos cuadernos en el Samuel &amp; Mietchen Corpus us\u00f3 versiones de Python obsoletas, y el desajuste entre la versi\u00f3n en la publicaci\u00f3n y la versi\u00f3n disponible cuando los revisores intentan reproducirse provoca sutiles incompatibilidades.<\/p>\n<p><strong>Fix:<\/strong> Use una versi\u00f3n de Python recientemente compatible y especifique en su archivo de entorno. La lista de verificaci\u00f3n de Repro recomienda documentar la versi\u00f3n de Python en el archivo L\u00e9ame.<\/p>\n<h3>Escolar 5: N\u00fameros aleatorios no deterministas<\/h3>\n<p>Una simulaci\u00f3n que genera condiciones iniciales aleatorias sin fijar la semilla produce diferentes salidas cada vez. Incluso con una semilla, los trabajadores paralelos pueden generar corrientes superpuestas.<\/p>\n<p><strong>FIX:<\/strong> Establezca una semilla fija para todas las operaciones aleatorias. Use <code>numpy.random.SeedSequence<\/code> para una reproducibilidad segura en paralelo. La lista de verificaci\u00f3n de reproducci\u00f3n recomienda expl\u00edcitamente este patr\u00f3n.<\/p>\n<h2>Cu\u00e1ndo elegir Contenedores vs. Entornos ligeros<\/h2>\n<p>Para la mayor\u00eda de los flujos de trabajo de simulaci\u00f3n, es suficiente la gesti\u00f3n del entorno ligero (Conda, PIP, UV). Obtiene reproducibilidad especificando versiones exactas del paquete, y los revisores pueden instalar el entorno con un solo comando.<\/p>\n<p><strong>Elija Conda\/UV\/PIP cuando:<\/strong><\/p>\n<ul>\n<li>Est\u00e1s trabajando con solucionadores basados en Python (fipy, openpde, fenics)<\/li>\n<li>usted tiene control sobre el entorno computacional de su parte<\/li>\n<li>Desea un flujo de trabajo ligero y port\u00e1til<\/li>\n<\/ul>\n<p><strong>Elige Docker cuando:<\/strong><\/p>\n<ul>\n<li>Debe compartir un flujo de trabajo con investigadores que no pueden instalar Conda o bibliotecas espec\u00edficas a nivel de sistema<\/li>\n<li>Su flujo de trabajo depende de los solucionadores de C++\/Fortran que deben compilarse<\/li>\n<li>Usted est\u00e1 enviando a una revista que requiere una reproducibilidad en contenedores (por ejemplo, <em>computo<\/em>)<\/li>\n<\/ul>\n<p>Para la gran mayor\u00eda de los documentos de ciencia y f\u00edsica de materiales computacionales, Conda o UV es la mejor opci\u00f3n: es m\u00e1s simple, m\u00e1s r\u00e1pido y suficiente para la reproducibilidad que necesitan los revisores y los lectores.<\/p>\n<h2>Una nota pr\u00e1ctica sobre las expectativas de la revista<\/h2>\n<p>La lista de comprobaci\u00f3n de REPRO documenta la heterogeneidad de las pol\u00edticas de reproducibilidad de las revistas. Algunas revistas (como <em>Biometric Journal<\/em> o <em>Journal of the American Statistical Association<\/em>) requieren verificaciones activas de reproducibilidad de los editores dedicados. Otros (como <em>The BMJ<\/em>) requieren el env\u00edo del c\u00f3digo pero no realizan comprobaciones de ejecuci\u00f3n independientes.<\/p>\n<p>Para el trabajo de simulaci\u00f3n computacional, la expectativa m\u00ednima en la mayor\u00eda de las revistas es:<\/p>\n<ul>\n<li><strong>Disponibilidad del c\u00f3digo:<\/strong> El c\u00f3digo de an\u00e1lisis debe proporcionarse como un archivo complementario o en un repositorio abierto (Github, Zenodo)<\/li>\n<li><strong>Disponibilidad de datos:<\/strong> Los datos utilizados para el an\u00e1lisis deben estar disponibles p\u00fablicamente o justificados<\/li>\n<li><strong>Especificaci\u00f3n del medio ambiente:<\/strong> Las versiones y los paquetes de software deben estar documentados<\/li>\n<\/ul>\n<p>Este es el piso, no el techo. Seguir los cinco pilares y la lista de verificaci\u00f3n de Repro coloca su trabajo sobre el piso y le indica que se toma en serio la reproducibilidad.<\/p>\n<h2>Siguiente pasos para su flujo de trabajo de simulaci\u00f3n<\/h2>\n<p>Si es nuevo en las pr\u00e1cticas de simulaci\u00f3n reproducibles, comience con los tres cambios m\u00e1s impactantes:<\/p>\n<ol>\n<li><strong>Agregue un archivo L\u00e9ame<\/strong> a su proyecto con descripciones de archivos y orden de ejecuci\u00f3n<\/li>\n<li><strong>Exporta tu entorno<\/strong> (<code>conda env export<\/code> o <code>uv export<\/code>) e incl\u00fayelo en tu archivo<\/li>\n<li><strong>Establecer semillas aleatorias<\/strong> en cada script de simulaci\u00f3n y usar <code>SeedSequence<\/code> para ejecuciones paralelas<\/li>\n<\/ol>\n<p>Estos tres cambios por s\u00ed solos eliminar\u00e1n el 80% de las fallas de reproducibilidad identificadas por Samuel &amp; Miet\u00e9n.<\/p>\n<p>Si necesita ayuda para dise\u00f1ar un flujo de trabajo de simulaci\u00f3n reproducible, desde la documentaci\u00f3n del cuaderno hasta el archivo de c\u00f3digos y el env\u00edo de revistas, nuestro equipo puede proporcionar consultas sobre el dise\u00f1o del flujo de trabajo, la especificaci\u00f3n del entorno y el archivo de datos de conformidad con Fair. Cont\u00e1ctenos para discutir su proyecto de simulaci\u00f3n espec\u00edfico. Construir una comunidad de software de investigaci\u00f3n sostenible (<a href=\"\/building-sustainable-research-software-communities\/\">c\u00f3mo abordamos el desarrollo arraigado comunitario<\/a>) es parte de ese proceso: la reproducibilidad mejora cuando todo el equipo comparte est\u00e1ndares comunes.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Las pr\u00e1cticas de publicaci\u00f3n reproducibles para los resultados de la simulaci\u00f3n no son un complemento opcional, son un requisito para una comunicaci\u00f3n cient\u00edfica cre\u00edble. Los cinco pilares (programaci\u00f3n alfabetizada, control de versiones, gesti\u00f3n del entorno, intercambio de datos, documentaci\u00f3n) y la lista de verificaci\u00f3n de Repro proporcionan una base estructurada y procesable para la reproducibilidad que se aplica en las disciplinas computacionales.<\/p>\n<p>la escala de la brecha de reproducibilidad: 12,4% de reproducci\u00f3n id\u00e9ntica exitosa en el Samuel &amp; Estudio Miechen: es un llamado a la acci\u00f3n. Cada flujo de trabajo de simulaci\u00f3n que incluye un archivo L\u00e9ame, un archivo de entorno y Seeds deterministas cierra una porci\u00f3n medible de esa brecha. La inversi\u00f3n es modesta: horas, no meses. La devoluci\u00f3n es la capacidad de cualquier lector, revisor o futuro investigador para verificar sus resultados de forma independiente.<\/p>\n<p>Para el investigador computacional, la reproducibilidad no es meramente una virtud metodol\u00f3gica, es la base de la credibilidad cient\u00edfica. Los cinco pilares te dan un marco. La lista de comprobaci\u00f3n de reproducci\u00f3n le da una lista de verificaci\u00f3n. Las herramientas (GIT, Conda, Zenodo) est\u00e1n disponibles. Lo que queda es la decisi\u00f3n de usarlos.<\/p>\n<h2 id=\"faq\">PF<\/h2>\n<h3>\u00bfCu\u00e1l es el marco de cinco pilares para la reproducibilidad?<\/h3>\n<p>Los cinco pilares, propuestos por Ziemann et al. (2023) son programaci\u00f3n alfabetizada, control de versiones de c\u00f3digo, control de entorno de c\u00e1lculo, intercambio de datos persistente y documentaci\u00f3n. Forman un marco estructurado para documentar y compartir flujos de trabajo computacionales reproducibles.<\/p>\n<h3>\u00bfQu\u00e9 es la lista de verificaci\u00f3n de la reproducci\u00f3n?<\/h3>\n<p>La Lista de Verificaci\u00f3n de Repro, publicada por Hornung et al. (2026), es una herramienta multidisciplinaria concisa para crear an\u00e1lisis reproducibles. Cubre la estructura de c\u00f3digo y datos, requisitos L\u00e9ame, especificaci\u00f3n del entorno, disponibilidad de datos, generaci\u00f3n de n\u00fameros aleatorios deterministas y resultados intermedios.<\/p>\n<h3>\u00bfPor qu\u00e9 los cuadernos de Jupyter fallan con tanta frecuencia?<\/h3>\n<p>Samuel y Mietchen (2024) encontraron que el 87,6% de los port\u00e1tiles basados en Python resultaron en excepciones durante la repetici\u00f3n autom\u00e1tica. Las causas principales son las dependencias faltantes o en conflicto (<code>ModuleNotFoundError<\/code> y <code>ImportError<\/code>), rutas de archivo no resueltas (<code>FileNotFoundError<\/code>) y generaci\u00f3n de n\u00fameros aleatorios no deterministas.<\/p>\n<h3>\u00bfC\u00f3mo elijo entre Conda y Docker?<\/h3>\n<p>Use Conda (o UV) para la mayor\u00eda de los flujos de trabajo de simulaci\u00f3n basados en Python: es m\u00e1s simple, m\u00e1s r\u00e1pido y suficiente para especificar versiones exactas de paquetes. Utilice Docker cuando necesite aislamiento completo en los sistemas operativos o cuando su flujo de trabajo dependa de los solucionadores de C++\/Fortran compilados.<\/p>\n<h3>\u00bfC\u00f3mo puedo hacer que los resultados de mi simulaci\u00f3n sean reproducibles sin compartir datos sin procesar?<\/h3>\n<p>Genera datos sint\u00e9ticos que imiten la estructura computacional de tus datos reales. La lista de verificaci\u00f3n de repro recomienda usar paquetes como <code>synthpop<\/code> o <code>simdata<\/code> en R, o <code>numpy.random<\/code> en Python, para crear datos de prueba sint\u00e9ticos que permitan una verificaci\u00f3n independiente de su c\u00f3digo de an\u00e1lisis.<\/p>\n","protected":false,"raw":"<ul>\n<li>Los cuadernos de Jupyter se ejecutan con \u00e9xito solo ~12,4% del tiempo cuando se declaran las dependencias: la gesti\u00f3n de entornos expl\u00edcitas cierra esta brecha<\/li>\n<li>El marco de los cinco pilares de Ziemann et al. (2023) proporciona una l\u00ednea de base estructurada para documentaci\u00f3n, control de versiones, gesti\u00f3n del entorno, intercambio de datos y cumplimiento justo<\/li>\n<li>La lista de verificaci\u00f3n de REPRO (Hornung et al., 2026) ofrece una pr\u00e1ctica herramienta de autoauditor\u00eda que cubre la estructura de carpetas, la especificaci\u00f3n del entorno, la disponibilidad de datos y la ejecuci\u00f3n determinista<\/li>\n<li>Las trampas comunes como rutas absolutas, dependencias inespec\u00edficas y readmes faltantes son las principales causas de fallas de reproducibilidad en la investigaci\u00f3n computacional<\/li>\n<li>Un flujo de trabajo paso a paso desde el dise\u00f1o de simulaci\u00f3n a trav\u00e9s de la documentaci\u00f3n del cuaderno, el archivo de c\u00f3digo y el env\u00edo de diarios proporciona una canalizaci\u00f3n de producci\u00f3n repetible<\/li>\n<\/ul>\n<h2>La brecha de reproducibilidad en la investigaci\u00f3n computacional<\/h2>\n<p>Cuando env\u00eda un documento basado en simulaci\u00f3n, los revisores verifican su metodolog\u00eda, las condiciones de los l\u00edmites, los estudios de convergencia y la comparaci\u00f3n con los puntos de referencia anal\u00edticos. Pero rara vez vuelven a ejecutar su c\u00f3digo. Los resultados presentados en sus figuras y tablas se convierten en el registro publicado, y si esos resultados fueron generados por un flujo de trabajo que no se puede reproducir, la publicaci\u00f3n descansa sobre una base no verificada.<\/p>\n<p>Este no es un problema te\u00f3rico. Samuel &amp; Mietchen (2024) analiz\u00f3 15.817 Jupyter cuadernos basados en Python de publicaciones biom\u00e9dicas indexadas en PubMed Central. De los cuadernos donde todas las dependencias declaradas pudieron instalarse con \u00e9xito, <strong>87.6% result\u00f3 en excepciones<\/strong> durante la repetici\u00f3n autom\u00e1tica. Solo 1203 port\u00e1tiles se completaron sin errores, y de ellos, 324 produjeron resultados que difer\u00edan de los resultados informados originalmente. Los 879 port\u00e1tiles restantes produjeron resultados id\u00e9nticos. Esta tasa de \u00e9xito del 5,56% para la reproducci\u00f3n id\u00e9ntica fue en realidad una mejora con respecto a la ejecuci\u00f3n inicial de 2021 (5,88%), lo que indica que los cuadernos recientes tienden a ser marginalmente mejores, pero la brecha sigue siendo enorme.<\/p>\n<p>\u00bfQu\u00e9 hace que la reproducibilidad sea m\u00e1s dif\u00edcil para los cient\u00edficos computacionales? Trabaja con solucionadores num\u00e9ricos, refinamientos de malla, esquemas de integraci\u00f3n de tiempo y estrategias de acoplamiento que producen resultados a trav\u00e9s de cadenas de operaciones de punto flotante. Un solo golpe de versi\u00f3n de Python, un par\u00e1metro predeterminado modificado en <code>numpy<\/code> o <code>scipy<\/code>, o una ruta relativa que no se resuelva en otra m\u00e1quina puede invalidar todas las figuras y tablas de su papel. El problema se agrava cuando su flujo de trabajo implica el refinamiento de malla adaptable, t\u00e9rminos de origen personalizados o condiciones de contorno no triviales, el tipo de patrones avanzados documentados en <a href=\"\/how-fipy-handles-meshes-and-grid-structures\/\">recursos fipy en este sitio<\/a>.<\/p>\n<h2>Cinco pilares de investigaci\u00f3n computacional reproducible<\/h2>\n<p>Ziemann et al. (2023) formalizaron los <strong>cinco pilares de la reproducibilidad computacional<\/strong> como marco para documentar y compartir flujos de trabajo reproducibles. Si bien se desarrollaron originalmente en el contexto de la bioinform\u00e1tica, estos pilares se aplican por igual a las simulaciones de ciencia de materiales, la din\u00e1mica de fluidos computacional y los solucionadores de PDE basados en vol\u00famenes finitos.<\/p>\n<h3>1. Programaci\u00f3n alfabetizada<\/h3>\n<p>La programaci\u00f3n alfabetizada significa documentar su flujo de trabajo computacional como una narrativa que intercala explicaci\u00f3n y c\u00f3digo ejecutable. En las ciencias computacionales, esto generalmente se manifiesta como cuadernos de Jupyter, documentos de Markdown o scripts de Python con extensos docStrings y comentarios en l\u00ednea.<\/p>\n<p>El objetivo no es simplemente producir un archivo reproducible, sino crear un documento que un lector que no est\u00e9 familiarizado con su an\u00e1lisis pueda seguir, comprender y volver a ejecutar. Samuel &amp; Mietchen (2024) encontr\u00f3 una clara correlaci\u00f3n entre la relaci\u00f3n <strong>reducci\u00f3n a celda de c\u00f3digo<\/strong> y una reproducci\u00f3n exitosa: los cuadernos con mayor esfuerzo de documentaci\u00f3n (m\u00e1s celdas de Markdown en relaci\u00f3n con las celdas de c\u00f3digo) ten\u00edan significativamente m\u00e1s probabilidades de reproducirse de manera id\u00e9ntica a la salida original.<\/p>\n<p>Para una simulaci\u00f3n de campo de fase en fipy\u2014<a href=\"\/understanding-fipys-core-architecture\/\">una introducci\u00f3n a su arquitectura central<\/a>\u2014o un modelo de difusi\u00f3n utilizando el m\u00e9todo de <a href=\"\/finite-volume-method-explained-simply\/\">volumen finito<\/a>, la programaci\u00f3n alfabetizada podr\u00eda verse as\u00ed:<\/p>\n<pre><code class=\"language-python\"># Set deterministic seed\nimport numpy as np\nnp.random.seed(42)\n\n# Build a structured grid (this should match the mesh description in your paper)\nnx, ny = 100, 100\nmesh = CellGrid([nx, ny], varIndex=1)\n\n# Define the transient diffusion term and boundary conditions\nT = CellVariable(name='Temperature', mesh=mesh, value=initial_temperature)\neqn = TransientTerm() == DiffusionTerm(coeff=thermal_conductivity)\n\n# Impose Dirichlet boundary conditions (see also our guide on FiPy BCs)\nT.fixLeft(value=300)\nT.fixRight(value=500)\n<\/code><\/pre>\n<p>Cuando escribe esta celda de cuaderno, est\u00e1 documentando simult\u00e1neamente la resoluci\u00f3n de la malla, la PDE y las condiciones de los l\u00edmites, y ejecutando la simulaci\u00f3n que produjo la figura publicada.<\/p>\n<p><strong>Recomendaci\u00f3n:<\/strong> Si su cuaderno tiene menos celdas de rebajas que las celdas de c\u00f3digo, est\u00e1 subdocumentado. Apunta a al menos una proporci\u00f3n de 1:1, e idealmente m\u00e1s. El Samuel &amp; El estudio de Mietchen encontr\u00f3 que el grupo de reproducci\u00f3n id\u00e9ntica ten\u00eda una relaci\u00f3n de reducci\u00f3n a c\u00f3digo de 0,73, mientras que el grupo de reproducci\u00f3n diferente ten\u00eda solo 0,49.<\/p>\n<h3>2. Control de versiones de c\u00f3digo y uso compartido<\/h3>\n<p>El control de versiones no es opcional para el trabajo de publicaci\u00f3n. Git proporciona un historial permanente y consultable de cada cambio de c\u00f3digo, y GitHub, GitLab o Zenodo archiva su repositorio como un objeto citable con un DOI.<\/p>\n<p>El prop\u00f3sito del control de versiones es doble:<\/p>\n<ul>\n<li><strong>Reproducibilidad:<\/strong> Un hash de confirmaci\u00f3n espec\u00edfico (<code>abc1234<\/code>) emparejado con una fecha de confirmaci\u00f3n espec\u00edfica le dice a cualquiera exactamente qu\u00e9 c\u00f3digo produjo sus resultados publicados.<\/li>\n<li><strong>Responsabilidad:<\/strong> Cada cambio de par\u00e1metro, cada modificaci\u00f3n de t\u00e9rmino fuente, se registra cada edici\u00f3n de condici\u00f3n de l\u00edmite. Cuando un revisor pregunta \"\u00bfpor qu\u00e9 us\u00f3 este coeficiente de difusi\u00f3n?\" Puede se\u00f1alar el compromiso exacto donde se estableci\u00f3.<\/li>\n<\/ul>\n<p>Al publicar, archive su repositorio en <a href=\"https:\/\/zenodo.org\/\" rel=\"nofollow\">zenodo<\/a> (o github con la integraci\u00f3n de Zenodo habilitada) e incluya el DOI en la disponibilidad de datos de su manuscrito Declaraci\u00f3n. Esto convierte su c\u00f3digo de simulaci\u00f3n en un artefacto permanente y citable. Muchas revistas ahora recomiendan depositar el c\u00f3digo en los repositorios con la asignaci\u00f3n de DOI: consulte el <a href=\"https:\/\/joss.theoj.org\/papers\/tagged\/simulation%20science\" rel=\"nofollow\">Joss Simulation Science Directrices<\/a> para las expectativas de las revistas sobre publicaciones basadas en simulaci\u00f3n.<\/p>\n<p><strong>Regla de decisi\u00f3n: \u00bfGithub vs. Zenodo?<\/strong> Usar GitHub para el desarrollo activo y la colaboraci\u00f3n. Usa zenodo para archivo. Zenodo asigna autom\u00e1ticamente un DOI a los repositorios de GitHub cuando se vincula, por lo que es la opci\u00f3n preferida para la publicaci\u00f3n. Puede mantener un repositorio de GitHub en vivo y archivar la confirmaci\u00f3n final en Zenodo para su env\u00edo.<\/p>\n<h3>3. Control de entorno de c\u00e1lculo<\/h3>\n<p>El control del medio ambiente es la intervenci\u00f3n t\u00e9cnica m\u00e1s importante que puede realizar. Cuando un revisor intenta reproducir sus resultados en una m\u00e1quina nueva, necesita conocer la pila de software exacta: versi\u00f3n de Python, versi\u00f3n de Numpy, versi\u00f3n de Fipy, bibliotecas de Solver. Sin esta informaci\u00f3n, el revisor est\u00e1 adivinando, y adivinando produce <code>ModuleNotFoundError<\/code>, <code>ImportError<\/code> y <code>FileNotFoundError<\/code> (las tres excepciones m\u00e1s comunes identificadas por Samuel &amp; Mietchen, responsables del 41,65% de toda ejecuci\u00f3n fracasos).<\/p>\n<p><strong>C\u00f3mo capturar tu entorno:<\/strong><\/p>\n<pre><code class=\"language-python\"># In Python, use the session-info package to export your environment\n!pip install session-info\nimport session_info\nsession_info.show()\n<\/code><\/pre>\n<pre><code class=\"language-bash\"># Conda environment export (alternative)\nconda env export &gt; environment.yml\n<\/code><\/pre>\n<pre><code class=\"language-bash\"># pip requirements (for simpler projects)\npip freeze &gt; requirements.txt\n<\/code><\/pre>\n<p><strong>Regla de decisi\u00f3n: \u00bfConda vs. PIP vs. Docker?<\/strong> Para la mayor\u00eda de los flujos de trabajo de ciencia computacional en Python, Conda es el mejor equilibrio de practicidad e integridad. Maneja tanto los paquetes de Python como las dependencias que no son de Python (como bibliotecas HDF5 o MPI Runtimes). Docker proporciona aislamiento total a costa de la complejidad; Use Docker cuando necesite compartir un flujo de trabajo con investigadores en diferentes sistemas operativos que no puedan instalar Conda o cuando su flujo de trabajo depende de bibliotecas a nivel de sistema.<\/p>\n<p>La lista de verificaci\u00f3n REPRO (Hornung et al., 2026) recomienda expl\u00edcitamente especificar versiones de software en el archivo L\u00e9ame y proporcionar un archivo de especificaci\u00f3n de entorno. Ellos se\u00f1alan: \"Para la reproducibilidad a largo plazo, el entorno del software tambi\u00e9n debe estar claramente documentado, incluidas las versiones de todos los paquetes adicionales utilizados\".<\/p>\n<h3>4. Intercambio de datos persistente<\/h3>\n<p>El intercambio de datos va de la mano con el uso compartido de c\u00f3digo. Sus salidas de simulaci\u00f3n (configuraciones de malla, matrices de campo, series de tiempo de variables) deben depositarse en un repositorio que asigna un identificador persistente (DOI).<\/p>\n<p>Para los datos de simulaci\u00f3n, esto normalmente significa:<\/p>\n<ul>\n<li><strong>Salidas de simulaci\u00f3n RAW<\/strong> (matrices de campo, archivos de malla, series temporales) depositadas junto con el c\u00f3digo<\/li>\n<li><strong>Resultados intermedios<\/strong> para simulaciones computacionalmente intensivas (consulte la recomendaci\u00f3n de Repro Checklist sobre resultados intermedios)<\/li>\n<li><strong>Datos de prueba sint\u00e9tico<\/strong> Si sus datos reales no pueden compartirse p\u00fablicamente debido a la privacidad o restricciones legales<\/li>\n<\/ul>\n<p>Los Principios de la Feria (Wilkinson et al., 2016) proporcionan un marco para la gesti\u00f3n de datos, consulte <a href=\"https:\/\/www.go-fair.org\/fair-principles\/\" rel=\"nofollow\">La gu\u00eda GO FAIR SOBRE EL Principios<\/a> para la orientaci\u00f3n oficial sobre la capacidad de b\u00fasqueda, accesibilidad, interoperabilidad y reutilizaci\u00f3n.<\/p>\n<ul>\n<li><strong>Findable:<\/strong> Asigne identificadores persistentes (DOI) e incluya metadatos enriquecidos<\/li>\n<li><strong>Accesible:<\/strong> Almacene datos en repositorios con protocolos abiertos (Zenodo, FigShare, Facilidad de datos de materiales)<\/li>\n<li><strong>Interoperable:<\/strong> Use formatos est\u00e1ndar (HDF5, netCDF, JSON) y vocabularios formales<\/li>\n<li><strong>Reutilizable:<\/strong> Documente la procedencia, la concesi\u00f3n de licencias y las tarjetas de datos<\/li>\n<\/ul>\n<p>Para la ciencia de los materiales y la f\u00edsica computacional, plataformas como <a href=\"https:\/\/www.materialscloud.org\/\" rel=\"nofollow\">cloud de materiales<\/a> y la <a href=\"https:\/\/nomad-lab.eu\/nomad-lab\/\" rel=\"nofollow\">nomad repository<\/a> Proporciona una infraestructura compatible con los datos de simulaci\u00f3n, completa con esquemas de metadatos y acceso a la API.<\/p>\n<h3>5. Documentaci\u00f3n<\/h3>\n<p>La lista de verificaci\u00f3n de repro pone un gran \u00e9nfasis en la documentaci\u00f3n, no como una ocurrencia tard\u00eda, sino como un componente estructural del trabajo reproducible. Un archivo L\u00e9ame debe:<\/p>\n<ul>\n<li>Enumere todos los archivos del repositorio y su prop\u00f3sito<\/li>\n<li>Especifique el orden de ejecuci\u00f3n exacto (qu\u00e9 scripts producen qu\u00e9 figuras o tablas)<\/li>\n<li>Proporcionar tiempos de ejecuci\u00f3n aproximados y requisitos de hardware<\/li>\n<li>Refiera los n\u00fameros de figura y tabla correspondientes de la publicaci\u00f3n<\/li>\n<\/ul>\n<p>Para los flujos de trabajo de simulaci\u00f3n, la documentaci\u00f3n tambi\u00e9n significa documentar sus m\u00e9todos num\u00e9ricos. Cuando escribes un solucionador personalizado o un script FIPy con la divisi\u00f3n del operador, <a href=\"https:\/\/matforge.org\/operator-splitting-strang-splitting-and-imex-schemes-for-pde-solvers\/\">strang Esquemas de divisi\u00f3n y IMEX para los solucionadores de PDE<\/a>, debe documentar:<\/p>\n<ul>\n<li>El esquema de discretizaci\u00f3n<\/li>\n<li>El m\u00e9todo de integraci\u00f3n del tiempo<\/li>\n<li>Las tolerancias del solucionador<\/li>\n<li>Los criterios de convergencia<\/li>\n<\/ul>\n<p>Si otro investigador no puede entender el m\u00e9todo num\u00e9rico detr\u00e1s de sus resultados, no puede evaluar si los resultados son v\u00e1lidos o reproducirlos en un solucionador diferente.<\/p>\n<h2>La lista de verificaci\u00f3n de reproducci\u00f3n como una herramienta de autoauditor\u00eda<\/h2>\n<p>La Repro Checklist (Hornung et al., 2026), publicada en <em>Royal Society Open Science<\/em> (<a href=\"https:\/\/royalsocietypublishing.org\/rsos\/article\/13\/6\/252489\/482007\/Overcoming-barriers-to-computational\" rel=\"nofollow\">full paper<\/a>), fue desarrollada por un consorcio internacional de editores de reproducibilidad de revistas para proporcionar un Marco procesable para la investigaci\u00f3n reproducible. Si bien se aplica ampliamente en todas las disciplinas, varios elementos son particularmente relevantes para el trabajo de simulaci\u00f3n computacional.<\/p>\n<p>A continuaci\u00f3n se explica c\u00f3mo utilizar la lista de verificaci\u00f3n de Repro como una autoauditor\u00eda previa a la presentaci\u00f3n:<\/p>\n<h3>A. Estructura y L\u00e9ame<\/h3>\n<p><strong>Check:<\/strong> \u00bfTiene un directorio <code>data\/<\/code>, <code>code\/<\/code> y <code>results\/<\/code> (o <code>output\/<\/code>)? \u00bfSu archivo L\u00e9ame enumera todos los archivos, especifica el orden de ejecuci\u00f3n y hace referencia a las figuras correspondientes de cada script?<\/p>\n<p><strong>Falla com\u00fan:<\/strong> Los investigadores organizan su c\u00f3digo de simulaci\u00f3n en una sola carpeta sin estructura. Un archivo L\u00e9ame a menudo se omite por completo. Sin un readme, un revisor no tiene forma de saber qu\u00e9 script produce qu\u00e9 figura, y puede ejecutar los scripts en el orden incorrecto, produciendo resultados completamente diferentes.<\/p>\n<h3>B. Especificaci\u00f3n del medio ambiente<\/h3>\n<p><strong>Check:<\/strong> \u00bfSe incluye su <code>environment.yml<\/code> o <code>requirements.txt<\/code> en el archivo? \u00bfSe especifican expl\u00edcitamente las versiones de Python y Package?<\/p>\n<p><strong>Falla com\u00fan:<\/strong> La raz\u00f3n m\u00e1s com\u00fan de los cuadernos fallan son las dependencias o en conflicto. Samuel &amp; Mietchen descubri\u00f3 que el 34,32% de los port\u00e1tiles fallaron en el paso de instalaci\u00f3n de dependencias, aunque ninguno de los archivos estaba mal formado. La causa ra\u00edz a menudo son las versiones de paquetes no especificadas o desactualizadas.<\/p>\n<h3>C. Disponibilidad de datos<\/h3>\n<p><strong>Comprobar:<\/strong> \u00bfPuede un revisor ejecutar su c\u00f3digo desde cero usando los datos proporcionados? Si no puede compartir datos reales, \u00bfha incluido datos sint\u00e9ticos que imitan la estructura computacional?<\/p>\n<p><strong>Falla com\u00fan:<\/strong> Cuando los datos reales no se pueden compartir (debido a restricciones legales, \u00e9ticas o institucionales), el c\u00f3digo a\u00fan debe ser ejecutable con datos sint\u00e9ticos. La lista de comprobaci\u00f3n de Repro recomienda generar datos sint\u00e9ticos usando paquetes como <code>synthpop<\/code> o <code>simdata<\/code> en R, o <code>numpy.random<\/code> en Python.<\/p>\n<h3>D. Ejecuci\u00f3n determinista<\/h3>\n<p><strong>Comprobar:<\/strong> \u00bfSe establecen expl\u00edcitamente las semillas del generador de n\u00fameros aleatorios? Para simulaciones en paralelo, \u00bfse utilizan flujos de n\u00fameros aleatorios reproducibles?<\/p>\n<p><strong>Falla com\u00fan:<\/strong> Esta es una de las causas m\u00e1s comunes y sutiles de irreproducibilidad. Una simulaci\u00f3n que usa <code>numpy.random.randn()<\/code> sin establecer una semilla producir\u00e1 resultados diferentes en cada ejecuci\u00f3n, e incluso con una semilla, los trabajadores paralelos pueden generar flujos aleatorios superpuestos. La lista de verificaci\u00f3n de Repro recomienda usar la generaci\u00f3n basada en <code>SeedSequence<\/code> basada en Numpy para flujos aleatorios deterministas y seguros en paralelo.<\/p>\n<pre><code class=\"language-python\">from numpy.random import default_rng\nrng = default_rng(42)  # Fixed seed\n<\/code><\/pre>\n<p>Para simulaciones en paralelo, use <code>numpy.random.SeedSequence<\/code> para generar flujos independientes y reproducibles:<\/p>\n<pre><code class=\"language-python\">from numpy.random import SeedSequence\nseq = SeedSequence(42)\nchildren = seq.spawn(n_children)  # Deterministic per-child seeds\n<\/code><\/pre>\n<h3>E. Resultados intermedios<\/h3>\n<p><strong>Comprobar:<\/strong> Para simulaciones computacionalmente intensivas (p. ej., barridos de par\u00e1metros, estudios de Monte Carlo), \u00bfse guardan los resultados intermedios para que los revisores puedan reproducir cifras espec\u00edficas sin volver a ejecutar el an\u00e1lisis completo?<\/p>\n<p><strong>Falla com\u00fan:<\/strong> Cuando una simulaci\u00f3n tarda horas o d\u00edas en ejecutarse, los revisores no pueden volver a ejecutarla desde cero. La lista de verificaci\u00f3n de Repro recomienda guardar resultados intermedios (salida sin procesar antes de la generaci\u00f3n de cifras finales) para que los revisores puedan verificar r\u00e1pidamente los resultados espec\u00edficos. Esto es especialmente importante para los estudios de simulaci\u00f3n con replicaciones paralelas.<\/p>\n<h2>Flujo de trabajo paso a paso desde el dise\u00f1o de simulaci\u00f3n hasta la presentaci\u00f3n<\/h2>\n<p>Esta secci\u00f3n proporciona un flujo de trabajo concreto que integra los cinco pilares y la lista de verificaci\u00f3n de Repro en una canalizaci\u00f3n de producci\u00f3n repetible.<\/p>\n<h3>Fase 1: Dise\u00f1o de simulaci\u00f3n y organizaci\u00f3n de c\u00f3digos<\/h3>\n<ol>\n<li><strong>Crear la estructura del proyecto:<\/strong><\/li>\n<\/ol>\n<pre><code>project\/\n\u251c\u2500\u2500 README.md\n\u251c\u2500\u2500 environment.yml\n\u251c\u2500\u2500 data\/\n\u2502   \u251c\u2500\u2500 input\/         # Simulation inputs, initial conditions\n\u2502   \u251c\u2500\u2500 output\/        # Raw simulation outputs\n\u2502   \u2514\u2500\u2500 synthetic\/     # Synthetic test data (if real data is restricted)\n\u251c\u2500\u2500 code\/\n\u2502   \u251c\u2500\u2500 mesh.py        # Mesh configuration\n\u2502   \u251c\u2500\u2500 solve.py       # Main simulation script\n\u2502   \u251c\u2500\u2500 postprocess.py # Figure generation\n\u2502   \u2514\u2500\u2500 test\/          # Unit tests and convergence checks\n\u2514\u2500\u2500 results\/\n    \u251c\u2500\u2500 figures\/\n    \u2514\u2500\u2500 tables\/\n<\/code><\/pre>\n<ol start=\"2\">\n<li><strong>Control de versiones:<\/strong> Inicialice el repositorio y confirme la estructura.<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">git init\ngit add README.md environment.yml\ngit commit -m \"Initial project structure\"\n<\/code><\/pre>\n<h3>Fase 2: Ejecuci\u00f3n de simulaci\u00f3n y documentaci\u00f3n<\/h3>\n<ol start=\"3\">\n<li><strong>Escriba la simulaci\u00f3n en un formato alfabetizado.<\/strong> Use cuadernos de Jupyter o archivos de secuencias de comandos con comentarios extensos. Documente cada m\u00e9todo num\u00e9rico, cada elecci\u00f3n de solucionador, cada condici\u00f3n de l\u00edmite.<\/li>\n<li><strong>Configurar semillas deterministas.<\/strong> Incluya <code>np.random.seed(42)<\/code> (o una configuraci\u00f3n de <code>SeedSequence<\/code> m\u00e1s sofisticada para ejecutar en paralelo) en la parte superior de cada script.<\/li>\n<li><strong>Capturar el entorno.<\/strong> Ejecutar <code>session_info.show()<\/code> o <code>conda env export<\/code> durante una ejecuci\u00f3n exitosa e incluir la salida en el L\u00e9ame.<\/li>\n<li><strong>Guardar resultados intermedios.<\/strong> Si su simulaci\u00f3n es intensiva computacionalmente, guarde las salidas sin procesar en los puntos de control para que los revisores puedan verificar cifras espec\u00edficas sin volver a ejecutar todo.<\/li>\n<\/ol>\n<h3>Fase 3: Validaci\u00f3n y Verificaci\u00f3n<\/h3>\n<ol start=\"7\">\n<li><strong>Ejecute estudios de convergencia.<\/strong> Verifique que sus resultados convergen como se espera mientras refina la malla. Esto es parte de la verificaci\u00f3n, verificando que la soluci\u00f3n num\u00e9rica se acerque a la soluci\u00f3n exacta a medida que disminuyen los par\u00e1metros de discretizaci\u00f3n. Para obtener un marco pr\u00e1ctico, consulte nuestra gu\u00eda sobre <a href=\"\/validation-and-verification-for-pde-simulations-practical-framework\/\">validaci\u00f3n y verificaci\u00f3n de simulaciones PDE<\/a>.<\/li>\n<li><strong>Escriba las pruebas unitarias.<\/strong> Pruebe las funciones individuales, las condiciones de contorno y los solucionadores. Si est\u00e1 utilizando Fipy, esto puede incluir probar que los valores de <code>CellVariable<\/code> se inicializan correctamente o que <code>DiffusionTerm<\/code> se discretiza correctamente. Consulte nuestro art\u00edculo sobre <a href=\"https:\/\/matforge.org\/python-testing-patterns-for-scientific-code-beyond-pytest-basics\/\">Patrones de prueba para c\u00f3digo cient\u00edfico<\/a> para obtener m\u00e1s detalles.<\/li>\n<\/ol>\n<h3>Fase 4: Archivado y Presentaci\u00f3n<\/h3>\n<ol start=\"9\">\n<li><strong>Archivo en Zenodo.<\/strong> Empuje el compromiso final a GitHub y vinc\u00falelo a Zenodo para la asignaci\u00f3n de DOI.<\/li>\n<li><strong>Ejecutar la auditor\u00eda de la lista de verificaci\u00f3n de Repro:<\/strong> <ul> <li>Archivo L\u00e9ame con la orden de ejecuci\u00f3n?<\/li> <li>Especificaci\u00f3n del medio ambiente \u00bfIncluido?<\/li> <li>Datos disponibles (reales o sint\u00e9ticos)?<\/li> <li>\u00bfSeries deterministas?<\/li> <li>\u00bfResultados intermedios guardados?<\/li> <\/ul><\/li>\n<li><strong>Env\u00ede con el c\u00f3digo y los datos doi<\/strong> en la declaraci\u00f3n de disponibilidad de datos de su manuscrito. Muchas revistas ahora requieren esto en la presentaci\u00f3n o revisi\u00f3n.<\/li>\n<\/ol>\n<h2>Trampas comunes y c\u00f3mo evitarlas<\/h2>\n<h3>Escolar 1: Caminos Absolutos<\/h3>\n<p>El uso de rutas absolutas como <code>\/home\/user\/simulations\/output\/data.csv<\/code> en su c\u00f3digo rompe la reproducibilidad en cualquier m\u00e1quina que no sea la que desarroll\u00f3 el proyecto.<\/p>\n<p><strong>fix:<\/strong> Utilice rutas relativas de la ra\u00edz del proyecto. Si sus scripts esperan datos en un directorio <code>data\/<\/code>, consulte <code>data\/input.csv<\/code> independientemente de d\u00f3nde se clone el proyecto.<\/p>\n<h3>Escoma 2: Dependencias no programadas<\/h3>\n<p>Un cuaderno importa <code>scipy.stats<\/code> pero no declara que se requiere <code>scipy<\/code>. Cuando otro investigador ejecuta el cuaderno, es posible que tenga una versi\u00f3n incompatible <code>scipy<\/code>, o la pierda por completo.<\/p>\n<p><strong>FIX:<\/strong> Incluya siempre un <code>requirements.txt<\/code> o <code>environment.yml<\/code> y verif\u00edquelo eliminando el entorno local y reinstal\u00e1ndolo desde cero antes de archivar.<\/p>\n<h3>Escollo 3: L\u00e9ame faltante<\/h3>\n<p>Sin un L\u00e9ame, los revisores no pueden saber:<\/p>\n<ul>\n<li>\u00bfQu\u00e9 gui\u00f3n produce qu\u00e9 figura<\/li>\n<li>Qu\u00e9 scripts de orden deben ejecutarse<\/li>\n<li>Qu\u00e9 tiempo de ejecuci\u00f3n aproximado esperar<\/li>\n<li>Qu\u00e9 versi\u00f3n de Python o versiones de paquete se utilizaron<\/li>\n<\/ul>\n<p><strong>Fix:<\/strong> Escriba un archivo README que enumere todos los archivos, cada paso de ejecuci\u00f3n y cada estimaci\u00f3n de tiempo de ejecuci\u00f3n. Haga referencia a los n\u00fameros de figura de su publicaci\u00f3n.<\/p>\n<h3>Escoma 4: deriva de la versi\u00f3n de Python<\/h3>\n<p>Python 3.6 fue el atardecer en 2021; Python 3.7 se puso en la puesta del sol en junio de 2023. Muchos cuadernos en el Samuel &amp; Mietchen Corpus us\u00f3 versiones de Python obsoletas, y el desajuste entre la versi\u00f3n en la publicaci\u00f3n y la versi\u00f3n disponible cuando los revisores intentan reproducirse provoca sutiles incompatibilidades.<\/p>\n<p><strong>Fix:<\/strong> Use una versi\u00f3n de Python recientemente compatible y especifique en su archivo de entorno. La lista de verificaci\u00f3n de Repro recomienda documentar la versi\u00f3n de Python en el archivo L\u00e9ame.<\/p>\n<h3>Escolar 5: N\u00fameros aleatorios no deterministas<\/h3>\n<p>Una simulaci\u00f3n que genera condiciones iniciales aleatorias sin fijar la semilla produce diferentes salidas cada vez. Incluso con una semilla, los trabajadores paralelos pueden generar corrientes superpuestas.<\/p>\n<p><strong>FIX:<\/strong> Establezca una semilla fija para todas las operaciones aleatorias. Use <code>numpy.random.SeedSequence<\/code> para una reproducibilidad segura en paralelo. La lista de verificaci\u00f3n de reproducci\u00f3n recomienda expl\u00edcitamente este patr\u00f3n.<\/p>\n<h2>Cu\u00e1ndo elegir Contenedores vs. Entornos ligeros<\/h2>\n<p>Para la mayor\u00eda de los flujos de trabajo de simulaci\u00f3n, es suficiente la gesti\u00f3n del entorno ligero (Conda, PIP, UV). Obtiene reproducibilidad especificando versiones exactas del paquete, y los revisores pueden instalar el entorno con un solo comando.<\/p>\n<p><strong>Elija Conda\/UV\/PIP cuando:<\/strong><\/p>\n<ul>\n<li>Est\u00e1s trabajando con solucionadores basados en Python (fipy, openpde, fenics)<\/li>\n<li>usted tiene control sobre el entorno computacional de su parte<\/li>\n<li>Desea un flujo de trabajo ligero y port\u00e1til<\/li>\n<\/ul>\n<p><strong>Elige Docker cuando:<\/strong><\/p>\n<ul>\n<li>Debe compartir un flujo de trabajo con investigadores que no pueden instalar Conda o bibliotecas espec\u00edficas a nivel de sistema<\/li>\n<li>Su flujo de trabajo depende de los solucionadores de C++\/Fortran que deben compilarse<\/li>\n<li>Usted est\u00e1 enviando a una revista que requiere una reproducibilidad en contenedores (por ejemplo, <em>computo<\/em>)<\/li>\n<\/ul>\n<p>Para la gran mayor\u00eda de los documentos de ciencia y f\u00edsica de materiales computacionales, Conda o UV es la mejor opci\u00f3n: es m\u00e1s simple, m\u00e1s r\u00e1pido y suficiente para la reproducibilidad que necesitan los revisores y los lectores.<\/p>\n<h2>Una nota pr\u00e1ctica sobre las expectativas de la revista<\/h2>\n<p>La lista de comprobaci\u00f3n de REPRO documenta la heterogeneidad de las pol\u00edticas de reproducibilidad de las revistas. Algunas revistas (como <em>Biometric Journal<\/em> o <em>Journal of the American Statistical Association<\/em>) requieren verificaciones activas de reproducibilidad de los editores dedicados. Otros (como <em>The BMJ<\/em>) requieren el env\u00edo del c\u00f3digo pero no realizan comprobaciones de ejecuci\u00f3n independientes.<\/p>\n<p>Para el trabajo de simulaci\u00f3n computacional, la expectativa m\u00ednima en la mayor\u00eda de las revistas es:<\/p>\n<ul>\n<li><strong>Disponibilidad del c\u00f3digo:<\/strong> El c\u00f3digo de an\u00e1lisis debe proporcionarse como un archivo complementario o en un repositorio abierto (Github, Zenodo)<\/li>\n<li><strong>Disponibilidad de datos:<\/strong> Los datos utilizados para el an\u00e1lisis deben estar disponibles p\u00fablicamente o justificados<\/li>\n<li><strong>Especificaci\u00f3n del medio ambiente:<\/strong> Las versiones y los paquetes de software deben estar documentados<\/li>\n<\/ul>\n<p>Este es el piso, no el techo. Seguir los cinco pilares y la lista de verificaci\u00f3n de Repro coloca su trabajo sobre el piso y le indica que se toma en serio la reproducibilidad.<\/p>\n<h2>Siguiente pasos para su flujo de trabajo de simulaci\u00f3n<\/h2>\n<p>Si es nuevo en las pr\u00e1cticas de simulaci\u00f3n reproducibles, comience con los tres cambios m\u00e1s impactantes:<\/p>\n<ol>\n<li><strong>Agregue un archivo L\u00e9ame<\/strong> a su proyecto con descripciones de archivos y orden de ejecuci\u00f3n<\/li>\n<li><strong>Exporta tu entorno<\/strong> (<code>conda env export<\/code> o <code>uv export<\/code>) e incl\u00fayelo en tu archivo<\/li>\n<li><strong>Establecer semillas aleatorias<\/strong> en cada script de simulaci\u00f3n y usar <code>SeedSequence<\/code> para ejecuciones paralelas<\/li>\n<\/ol>\n<p>Estos tres cambios por s\u00ed solos eliminar\u00e1n el 80% de las fallas de reproducibilidad identificadas por Samuel &amp; Miet\u00e9n.<\/p>\n<p>Si necesita ayuda para dise\u00f1ar un flujo de trabajo de simulaci\u00f3n reproducible, desde la documentaci\u00f3n del cuaderno hasta el archivo de c\u00f3digos y el env\u00edo de revistas, nuestro equipo puede proporcionar consultas sobre el dise\u00f1o del flujo de trabajo, la especificaci\u00f3n del entorno y el archivo de datos de conformidad con Fair. Cont\u00e1ctenos para discutir su proyecto de simulaci\u00f3n espec\u00edfico. Construir una comunidad de software de investigaci\u00f3n sostenible (<a href=\"\/building-sustainable-research-software-communities\/\">c\u00f3mo abordamos el desarrollo arraigado comunitario<\/a>) es parte de ese proceso: la reproducibilidad mejora cuando todo el equipo comparte est\u00e1ndares comunes.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Las pr\u00e1cticas de publicaci\u00f3n reproducibles para los resultados de la simulaci\u00f3n no son un complemento opcional, son un requisito para una comunicaci\u00f3n cient\u00edfica cre\u00edble. Los cinco pilares (programaci\u00f3n alfabetizada, control de versiones, gesti\u00f3n del entorno, intercambio de datos, documentaci\u00f3n) y la lista de verificaci\u00f3n de Repro proporcionan una base estructurada y procesable para la reproducibilidad que se aplica en las disciplinas computacionales.<\/p>\n<p>la escala de la brecha de reproducibilidad: 12,4% de reproducci\u00f3n id\u00e9ntica exitosa en el Samuel &amp; Estudio Miechen: es un llamado a la acci\u00f3n. Cada flujo de trabajo de simulaci\u00f3n que incluye un archivo L\u00e9ame, un archivo de entorno y Seeds deterministas cierra una porci\u00f3n medible de esa brecha. La inversi\u00f3n es modesta: horas, no meses. La devoluci\u00f3n es la capacidad de cualquier lector, revisor o futuro investigador para verificar sus resultados de forma independiente.<\/p>\n<p>Para el investigador computacional, la reproducibilidad no es meramente una virtud metodol\u00f3gica, es la base de la credibilidad cient\u00edfica. Los cinco pilares te dan un marco. La lista de comprobaci\u00f3n de reproducci\u00f3n le da una lista de verificaci\u00f3n. Las herramientas (GIT, Conda, Zenodo) est\u00e1n disponibles. Lo que queda es la decisi\u00f3n de usarlos.<\/p>\n<h2 id=\"faq\">PF<\/h2>\n<h3>\u00bfCu\u00e1l es el marco de cinco pilares para la reproducibilidad?<\/h3>\n<p>Los cinco pilares, propuestos por Ziemann et al. (2023) son programaci\u00f3n alfabetizada, control de versiones de c\u00f3digo, control de entorno de c\u00e1lculo, intercambio de datos persistente y documentaci\u00f3n. Forman un marco estructurado para documentar y compartir flujos de trabajo computacionales reproducibles.<\/p>\n<h3>\u00bfQu\u00e9 es la lista de verificaci\u00f3n de la reproducci\u00f3n?<\/h3>\n<p>La Lista de Verificaci\u00f3n de Repro, publicada por Hornung et al. (2026), es una herramienta multidisciplinaria concisa para crear an\u00e1lisis reproducibles. Cubre la estructura de c\u00f3digo y datos, requisitos L\u00e9ame, especificaci\u00f3n del entorno, disponibilidad de datos, generaci\u00f3n de n\u00fameros aleatorios deterministas y resultados intermedios.<\/p>\n<h3>\u00bfPor qu\u00e9 los cuadernos de Jupyter fallan con tanta frecuencia?<\/h3>\n<p>Samuel y Mietchen (2024) encontraron que el 87,6% de los port\u00e1tiles basados en Python resultaron en excepciones durante la repetici\u00f3n autom\u00e1tica. Las causas principales son las dependencias faltantes o en conflicto (<code>ModuleNotFoundError<\/code> y <code>ImportError<\/code>), rutas de archivo no resueltas (<code>FileNotFoundError<\/code>) y generaci\u00f3n de n\u00fameros aleatorios no deterministas.<\/p>\n<h3>\u00bfC\u00f3mo elijo entre Conda y Docker?<\/h3>\n<p>Use Conda (o UV) para la mayor\u00eda de los flujos de trabajo de simulaci\u00f3n basados en Python: es m\u00e1s simple, m\u00e1s r\u00e1pido y suficiente para especificar versiones exactas de paquetes. Utilice Docker cuando necesite aislamiento completo en los sistemas operativos o cuando su flujo de trabajo dependa de los solucionadores de C++\/Fortran compilados.<\/p>\n<h3>\u00bfC\u00f3mo puedo hacer que los resultados de mi simulaci\u00f3n sean reproducibles sin compartir datos sin procesar?<\/h3>\n<p>Genera datos sint\u00e9ticos que imiten la estructura computacional de tus datos reales. La lista de verificaci\u00f3n de repro recomienda usar paquetes como <code>synthpop<\/code> o <code>simdata<\/code> en R, o <code>numpy.random<\/code> en Python, para crear datos de prueba sint\u00e9ticos que permitan una verificaci\u00f3n independiente de su c\u00f3digo de an\u00e1lisis.<\/p>\n"},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 14<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>Aprenda c\u00f3mo hacer que los resultados de la simulaci\u00f3n sean reproducibles utilizando cuadernos de Jupyter, control de versiones, gesti\u00f3n del entorno, archivo de Zenodo y principios justos. Una gu\u00eda pr\u00e1ctica para investigadores computacionales.<\/p>\n","protected":false,"raw":"Aprenda c\u00f3mo hacer que los resultados de la simulaci\u00f3n sean reproducibles utilizando cuadernos de Jupyter, control de versiones, gesti\u00f3n del entorno, archivo de Zenodo y principios justos. Una gu\u00eda pr\u00e1ctica para investigadores computacionales."},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_locale":"es_ES","_original_post":"https:\/\/matforge.org\/?p=523","iawp_total_views":0,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-782","post","type-post","status-publish","format-standard","hentry","category-simulation-modeling-projects","es-ES"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Pr\u00e1cticas de publicaci\u00f3n reproducibles para los resultados de la simulaci\u00f3n: El marco de los cinco pilares - matforge.org<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/matforge.org\/es\/reproducible-publication-practices-simulation-results\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pr\u00e1cticas de publicaci\u00f3n reproducibles para los resultados de la simulaci\u00f3n: El marco de los cinco pilares - matforge.org\" \/>\n<meta property=\"og:description\" content=\"Reading Time:  14 minutesAprenda c\u00f3mo hacer que los resultados de la simulaci\u00f3n sean reproducibles utilizando cuadernos de Jupyter, control de versiones, gesti\u00f3n del entorno, archivo de Zenodo y principios justos. Una gu\u00eda pr\u00e1ctica para investigadores computacionales.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/matforge.org\/es\/reproducible-publication-practices-simulation-results\/\" \/>\n<meta property=\"og:site_name\" content=\"matforge.org\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-30T12:21:41+00:00\" \/>\n<meta name=\"author\" content=\"Priya Nair\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Priya Nair\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"22 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/reproducible-publication-practices-simulation-results\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/reproducible-publication-practices-simulation-results\\\/\"},\"author\":{\"name\":\"Priya Nair\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/2effd7bc155a5e6357f31dac970c5795\"},\"headline\":\"Pr\u00e1cticas de publicaci\u00f3n reproducibles para los resultados de la simulaci\u00f3n: El marco de los cinco pilares\",\"datePublished\":\"2026-07-30T12:21:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/reproducible-publication-practices-simulation-results\\\/\"},\"wordCount\":4238,\"commentCount\":0,\"articleSection\":[\"Simulaci\u00f3n &amp; Proyectos de modelado\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/matforge.org\\\/es\\\/reproducible-publication-practices-simulation-results\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/reproducible-publication-practices-simulation-results\\\/\",\"url\":\"https:\\\/\\\/matforge.org\\\/es\\\/reproducible-publication-practices-simulation-results\\\/\",\"name\":\"Pr\u00e1cticas de publicaci\u00f3n reproducibles para los resultados de la simulaci\u00f3n: El marco de los cinco pilares - matforge.org\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\"},\"datePublished\":\"2026-07-30T12:21:41+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/2effd7bc155a5e6357f31dac970c5795\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/reproducible-publication-practices-simulation-results\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/matforge.org\\\/es\\\/reproducible-publication-practices-simulation-results\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/matforge.org\\\/es\\\/reproducible-publication-practices-simulation-results\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/matforge.org\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pr\u00e1cticas de publicaci\u00f3n reproducibles para los resultados de la simulaci\u00f3n: El marco de los cinco pilares\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#website\",\"url\":\"https:\\\/\\\/matforge.org\\\/\",\"name\":\"matforge.org\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/matforge.org\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/matforge.org\\\/#\\\/schema\\\/person\\\/2effd7bc155a5e6357f31dac970c5795\",\"name\":\"Priya Nair\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f11e168d4cd2f1eff83cbb851d6cff42d81d88bb59d8831ee77468aa4a5eea88?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f11e168d4cd2f1eff83cbb851d6cff42d81d88bb59d8831ee77468aa4a5eea88?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f11e168d4cd2f1eff83cbb851d6cff42d81d88bb59d8831ee77468aa4a5eea88?s=96&d=mm&r=g\",\"caption\":\"Priya Nair\"},\"sameAs\":[\"http:\\\/\\\/matforge.org\"],\"url\":\"https:\\\/\\\/matforge.org\\\/author\\\/priya-nair\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Pr\u00e1cticas de publicaci\u00f3n reproducibles para los resultados de la simulaci\u00f3n: El marco de los cinco pilares - matforge.org","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/matforge.org\/es\/reproducible-publication-practices-simulation-results\/","og_locale":"es_ES","og_type":"article","og_title":"Pr\u00e1cticas de publicaci\u00f3n reproducibles para los resultados de la simulaci\u00f3n: El marco de los cinco pilares - matforge.org","og_description":"Reading Time:  14 minutesAprenda c\u00f3mo hacer que los resultados de la simulaci\u00f3n sean reproducibles utilizando cuadernos de Jupyter, control de versiones, gesti\u00f3n del entorno, archivo de Zenodo y principios justos. Una gu\u00eda pr\u00e1ctica para investigadores computacionales.","og_url":"https:\/\/matforge.org\/es\/reproducible-publication-practices-simulation-results\/","og_site_name":"matforge.org","article_published_time":"2026-07-30T12:21:41+00:00","author":"Priya Nair","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Priya Nair","Tiempo de lectura":"22 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/matforge.org\/es\/reproducible-publication-practices-simulation-results\/#article","isPartOf":{"@id":"https:\/\/matforge.org\/es\/reproducible-publication-practices-simulation-results\/"},"author":{"name":"Priya Nair","@id":"https:\/\/matforge.org\/#\/schema\/person\/2effd7bc155a5e6357f31dac970c5795"},"headline":"Pr\u00e1cticas de publicaci\u00f3n reproducibles para los resultados de la simulaci\u00f3n: El marco de los cinco pilares","datePublished":"2026-07-30T12:21:41+00:00","mainEntityOfPage":{"@id":"https:\/\/matforge.org\/es\/reproducible-publication-practices-simulation-results\/"},"wordCount":4238,"commentCount":0,"articleSection":["Simulaci\u00f3n &amp; Proyectos de modelado"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/matforge.org\/es\/reproducible-publication-practices-simulation-results\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/matforge.org\/es\/reproducible-publication-practices-simulation-results\/","url":"https:\/\/matforge.org\/es\/reproducible-publication-practices-simulation-results\/","name":"Pr\u00e1cticas de publicaci\u00f3n reproducibles para los resultados de la simulaci\u00f3n: El marco de los cinco pilares - matforge.org","isPartOf":{"@id":"https:\/\/matforge.org\/#website"},"datePublished":"2026-07-30T12:21:41+00:00","author":{"@id":"https:\/\/matforge.org\/#\/schema\/person\/2effd7bc155a5e6357f31dac970c5795"},"breadcrumb":{"@id":"https:\/\/matforge.org\/es\/reproducible-publication-practices-simulation-results\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/matforge.org\/es\/reproducible-publication-practices-simulation-results\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/matforge.org\/es\/reproducible-publication-practices-simulation-results\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/matforge.org\/es\/"},{"@type":"ListItem","position":2,"name":"Pr\u00e1cticas de publicaci\u00f3n reproducibles para los resultados de la simulaci\u00f3n: El marco de los cinco pilares"}]},{"@type":"WebSite","@id":"https:\/\/matforge.org\/#website","url":"https:\/\/matforge.org\/","name":"matforge.org","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/matforge.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/matforge.org\/#\/schema\/person\/2effd7bc155a5e6357f31dac970c5795","name":"Priya Nair","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/f11e168d4cd2f1eff83cbb851d6cff42d81d88bb59d8831ee77468aa4a5eea88?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f11e168d4cd2f1eff83cbb851d6cff42d81d88bb59d8831ee77468aa4a5eea88?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f11e168d4cd2f1eff83cbb851d6cff42d81d88bb59d8831ee77468aa4a5eea88?s=96&d=mm&r=g","caption":"Priya Nair"},"sameAs":["http:\/\/matforge.org"],"url":"https:\/\/matforge.org\/author\/priya-nair\/"}]}},"_links":{"self":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/782","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/comments?post=782"}],"version-history":[{"count":1,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/782\/revisions"}],"predecessor-version":[{"id":942,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/posts\/782\/revisions\/942"}],"wp:attachment":[{"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/media?parent=782"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/categories?post=782"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matforge.org\/wp-json\/wp\/v2\/tags?post=782"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}