jupyter-estructural-v2
diseño mecanico y geometrico de estructuras de LAT / LMT
Install / Use
npx skills add agerpk/jupyter-estructural-v2Installs into whichever agent you are using.
Amazon Q Rules
Amazon Q Developer rules
Quality Score
Category
Development & EngineeringSupported Platforms
Tags
Our assessment of jupyter-estructural-v2
jupyter-estructural-v2 scores 55/100 on our quality scale, 4212th of 4,628 Development & Engineering skills we index.
Its Amazon Q Rules is 42 KB long, well organised into 78 sections with 30 code examples: long enough that it reads more like full documentation than a focused instruction file, which agents can find harder to follow.
It has no GitHub stars yet, so there is no community track record; judge it on its content.
Maintenance, license and trust
- We could not determine when the repository was last updated.
- Our last check on 2026-09-02 found the source still online.
- No license is declared. By default that means all rights are reserved: you can read it, but reusing or redistributing it is not clearly permitted. Ask the author before building on it commercially.
- Its trust signals score 68/100, with 3 cautions from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
jupyter-estructural-v2 compared with similar skills
All 4 of these similar skills score higher than jupyter-estructural-v2; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| jupyter-estructural-v2 (this skill)by agerpk | 55 | 0 | — | Amazon Q Rules |
| taste-skillby Leonxlnx | 100 | 103.8k | today | CLAUDE.md |
| ai-job-searchby ai-job-search-dev | 100 | 66.9k | today | CLAUDE.md |
| claude-howtoby luongnv89 | 100 | 45.6k | 1d ago | CLAUDE.md |
| algorithmic-artby anthropics | 100 | 177.9k | 35d ago | SKILL.md |
Frequently asked questions
- How do I install jupyter-estructural-v2?
- Run
npx skills add agerpk/jupyter-estructural-v2. The install tabs above show the steps for each supported agent. - Which AI agents does jupyter-estructural-v2 work with?
- It is written for Amazon Q, as a Amazon Q Rules file. Other agents that read the same format can often use it too.
- Is jupyter-estructural-v2 safe to use?
- It declares no license and scores 68/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is jupyter-estructural-v2 still maintained?
- We could not determine when the repository was last updated.
Skill content
View source on GitHubTroubleshooting Guide
Common Issues and Solutions
dcc.Slider Component TypeError - Unexpected Keyword Argument
Problem: Error when navigating to CMC view: TypeError: The dcc.Slider component received an unexpected keyword argument: 'tipo'
Root Cause: The obtener_config_control() function returns a dictionary that includes a tipo field (used internally to identify control type), but dcc.Slider doesn't accept this argument.
Solution: Filter out the tipo field before passing configuration to dcc.Slider:
# Wrong - passes all fields including 'tipo'
dcc.Slider(**{**obtener_config_control("alpha"), "id": "slider-alpha", "value": value})
# Correct - filter out 'tipo' field
dcc.Slider(id="slider-alpha", value=value, **{k: v for k, v in obtener_config_control("alpha").items() if k != "tipo"})
Key Learning: Always validate that component arguments match the expected interface. Internal configuration fields should be filtered before passing to Dash components.
Plotly Graphs Not Appearing When Loading from Cache
Problem: Interactive Plotly graphs appear when calculated directly in a view, but disappear when loading from cache or executing from "Calcular Todo".
Root Cause: Only PNG files were being saved with fig.write_image(), but JSON files are required for dcc.Graph to display interactive Plotly figures.
Solution: Save BOTH formats when caching Plotly figures:
# PNG for static export
fig.write_image(str(png_path), width=1200, height=600)
# JSON for interactive display
fig.write_json(str(json_path))
Key Learning: Plotly figures require JSON format for interactivity in Dash. Always save both PNG (export) and JSON (display) when caching.
View Reloading After Calculation
Problem: After clicking "Calcular" in CMC view, results appear briefly then the view reloads showing cached results instead of fresh ones.
Root Cause: Navigation callback had Input("menu-guardar-estructura", "n_clicks") which triggered whenever parameters were saved, causing unwanted view reloads.
Solution: Remove non-navigation menu items from navigation callback Inputs. Only include menu items that explicitly change views:
@app.callback(
Output("contenido-principal", "children"),
Input("btn-inicio", "n_clicks"),
Input("menu-calculo-mecanico", "n_clicks"),
# DO NOT include: Input("menu-guardar-estructura", "n_clicks")
State("estructura-actual", "data"),
)
Key Learning: Navigation callbacks should ONLY respond to navigation actions, not to save/update actions.
Callbacks Triggering on Page Load
Problem: Callbacks execute automatically when page loads, causing unnecessary computations or UI updates.
Solution: Add prevent_initial_call=True to callback decorator:
@app.callback(
Output("badge-estructura-actual", "children"),
Input("estructura-actual", "data"),
prevent_initial_call=True
)
Results Disappearing on Error
Problem: When calculation fails, previous results are cleared from the view.
Solution: Return dash.no_update instead of empty components on error:
try:
# calculation logic
return results_html, True, "Éxito", "Cálculo completado", "success", "success"
except Exception as e:
return dash.no_update, True, "Error", f"Error: {str(e)}", "danger", "danger"
Multiple Callbacks Updating Same Output
Problem: Dash raises error when multiple callbacks try to update the same Output.
Solution: Use allow_duplicate=True on all but the first callback:
@app.callback(
Output("resultados-cmc", "children", allow_duplicate=True),
Input("btn-calcular-cmc", "n_clicks"),
prevent_initial_call=True
)
State vs Input Confusion
Problem: Callback triggers when data changes even though it shouldn't.
Key Difference:
Input: Triggers callback when value changesState: Provides value but does NOT trigger callback
Example:
@app.callback(
Output("contenido-principal", "children"),
Input("menu-calculo-mecanico", "n_clicks"), # Triggers on click
State("estructura-actual", "data"), # Provides data but doesn't trigger
)
Debugging Tips
Identify Which Callback is Triggering
Use dash.callback_context to see what triggered the callback:
ctx = dash.callback_context
if ctx.triggered:
trigger_id = ctx.triggered[0]["prop_id"].split(".")[0]
print(f"Triggered by: {trigger_id}")
Prevent Unwanted Triggers
Return dash.no_update early if trigger is not expected:
ctx = dash.callback_context
if not ctx.triggered:
return dash.no_update
trigger_id = ctx.triggered[0]["prop_id"].split(".")[0]
if trigger_id not in ["expected-button-1", "expected-button-2"]:
return dash.no_update
Cache Management
When results show as "from cache" unexpectedly:
- Check if
CalculoCache.verificar_vigencia()is being called - Ensure cache loading doesn't verify vigencia when you want to preserve results
- Remove vigencia checks from navigation callbacks to always show cached results
Missing Function Arguments
Problem: Function call fails with "missing required positional arguments" error.
Example: CalculoCache.guardar_calculo_sph() called with single dict argument instead of separate parameters.
Solution: Check function signature and pass arguments individually:
# Wrong
CalculoCache.guardar_calculo_sph(nombre, calculo_dict)
# Correct
CalculoCache.guardar_calculo_sph(nombre, parametros, resultados, desarrollo_texto)
Key Learning: Always verify function signatures when calling from different contexts (direct call vs. orchestrated call).
Orchestrated Calculations
Pattern: When implementing "Calcular Todo" or similar orchestration:
- Reuse existing calculation functions from individual controllers
- Reuse existing result generation functions from individual views
- Don't duplicate logic - call the same functions used in individual views
- Ensure all cache operations save complete data (including JSON for Plotly)
- Test that cached results display identically whether calculated individually or orchestrated
Anti-pattern: Creating separate calculation logic for orchestrated workflows leads to inconsistencies.
Performance Optimization
Avoid Redundant Callbacks
- Don't add Inputs that aren't related to the callback's purpose
- Use
prevent_initial_call=Trueliberally - Return
dash.no_updatewhen no update is needed
List Building for Dash Components
Problem: Components not appearing when using .extend([component1, component2]).
Solution: Use .append() for each component individually:
# Preferred
resultados.append(html.H6("Title"))
resultados.append(dcc.Graph(figure=fig))
# Avoid
resultados.extend([html.H6("Title"), dcc.Graph(figure=fig)])
Key Learning: Individual .append() calls ensure proper component registration in Dash's component tree.
Minimize File I/O in Callbacks
- Cache file reads in memory when possible
- Avoid reading navigation state file on every callback
- Use Dash Stores for frequently accessed data
Async Operations
For long-running calculations, use threading to avoid blocking:
import threading
def guardar_async():
CalculoCache.guardar_calculo_cmc(...)
threading.Thread(target=guardar_async, daemon=True).start()
Console Capture Best Practices
Implementing stdout/stderr Redirection
- Complete Interface: Implement all file-like methods (
write,flush,isatty,fileno) - Delegation: Use
__getattr__to delegate unknown attributes to original stdout - Thread Safety: Use locks when accessing shared buffer
- Memory Management: Limit buffer size to prevent memory issues
- Avoid Recursion: Don't call
print()inside buffer manipulation methods
Dash Callbacks for View-Specific Components
- Exception Handling: Wrap callback logic in try-except to handle missing components
- No Interval: Avoid
dcc.Intervalfor view-specific updates - use manual refresh - prevent_initial_call=False: Load content when entering view
- dash.no_update: Return when component doesn't exist or error occurs
Lessons Learned
Callback Conflicts - Unique IDs for Multiple Modal Systems
Context: Implementing family structures feature with modal editing similar to tabla_parametros.
Issue: DuplicateCallback error when both familia_controller.py and tabla_parametros_controller.py used same modal IDs (modal-parametro, modal-body-parametro, modal-celda-info).
Root Cause: Multiple controllers defining callbacks with identical Output IDs causes Dash to reject duplicate callback registration.
Resolution:
- Unique ID prefixes: Use
familia-modal-*for family modals vsmodal-*for parameter table modals - Unique button types: Use
familia-opcion-btn,familia-bool-btnvsopcion-btn,bool-btn - Component ID consistency: Update both controller callbacks AND component creation to use same unique IDs
Critical Pattern:
# Controller callbacks
@app.callback(
[Output("modal-familia-parametro", "is_open"),
Output("modal-familia-body-parametro", "children")],
[Input("tabla-familia", "active_cell"),
Input("modal-familia-confirmar", "n_clicks")]
)
# Component creation
dbc.Modal([
dbc.ModalBody(id="modal-familia-body-parametro"),
dbc.ModalFooter([
dbc.Button("Confirmar", id="modal-familia-confirmar")
])
], id="modal-familia-parametro")
# Button types in modal content
dbc.Button(
opcion,
id={"type": "familia-opcion-btn", "value": opcion}
)
Key Takeaway: When implementing similar features, always use unique ID prefixes to avoid callback conflicts. Apply prefix consistently across:
- Controller callback Inputs/Outputs
- Component creation IDs
- Pattern-matching component types
Files Modified:
controllers/familia_controller.py- Unique callback IDscomponents/vista_familia_estructuras.py- Unique component IDs
Family Structures Implementation - Button Controls
Context: Adding control buttons (Agregar/Eliminar Estructura, Guardar Familia, Cargar Columna) to family structures view.
Implementation Pattern:
- Component Creation: Add buttons in
crear_botones_control_familia()function - Callback Registration: Add callbacks in
register_callbacks(app)function in controller - Dynamic Table Updates: Use
allow_duplicate=Truefor table columns and data outputs - State Management: Use table columns and data as State inputs for modifications
Button Functionality:
- Agregar Estructura: Adds new column (Estr.N+1), copies values from last existing column
- Eliminar Estructura: Removes highest numbered column, prevents deletion if only one remains
- Column Numbering: Finds next available number, handles gaps in sequence
- Data Preservation: Maintains all parameter values when adding/removing columns
Key Pattern:
# Component
dbc.Button("Agregar Estructura", id="btn-agregar-estructura", color="success")
# Controller
@app.callback(
[Output("tabla-familia", "columns", allow_duplicate=True),
Output("tabla-familia", "data", allow_duplicate=True)],
Input("btn-agregar-estructura", "n_clicks"),
[State("tabla-familia", "columns"), State("tabla-familia", "data")]
)
Files Modified:
components/vista_familia_estructuras.py- Added button controlscontrollers/familia_controller.py- Added button callbacks
Lessons Learned
Dual Format Storage for Plotly
Context: Implementing "Calcular Todo" feature that orchestrates multiple calculations.
Issue: Plotly graphs appeared when calculated in individual views but not when executed from orchestra
Truncated for display — read the full file on GitHub.
Related Skills
taste-skill
103.8kAgent skills that give coding agents taste: art direction, reference images and a browser check instead of generic AI pages
ai-job-search
66.9kThe job search that runs on your machine. AI job application framework built on Claude Code: evaluate postings, tailor CVs, write cover letters, prep interviews. Fork it and own it.
claude-howto
45.6kA visual, example-driven guide to Claude Code — from basic concepts to advanced agents, with copy-paste templates that bring immediate value.
algorithmic-art
177.9kCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems.
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
