[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6XGPFEWB6HMBTNV9TFCZ03H":3,"skill-same:01M6XGPFEWB6HMBTNV9TFCZ03H":75},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":55,"commitSha":56,"skillDirectory":57,"forksCount":14,"repositoryHtmlUrl":58,"repositoryHomepageUrl":6,"ownerHtmlUrl":59,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":60,"install":61,"resources":74},"01M6XGPFEWB6HMBTNV9TFCZ03H","wave-propagation",null,"Simulate wave propagation — acoustic, electromagnetic, elastic, and quantum waves. FDTD, spectral methods, and absorbing boundary conditions for 1D\u002F2D\u002F3D wave equations with sources, scattering, and dispersion.","fadrienne\u002FMyGitHub","fadrienne","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F197874571?v=4","01M6X64V8VWCRSMFZ4EPS2BWXG","Francesca Adrienne","01M6X64VD5MW4F9PHDWQKS7ZAF",0,"MIT","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fopenscience\u002Fbackend\u002Fcli\u002Fskills\u002Fphysics\u002Fwave-propagation\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"wave propagation","propagation","sources","FDTD","Wave Equation","Boundary Conditions","2d","for","with","spectral","electromagnetics","3D","synthetic","quantum","acoustics","physics","scipy","numpy","methods","simulation","2026-11-10 10:12:30",false,"---\nname: wave-propagation\ndescription: Simulate wave propagation — acoustic, electromagnetic, elastic, and quantum waves. FDTD, spectral methods, and absorbing boundary conditions for 1D\u002F2D\u002F3D wave equations with sources, scattering, and dispersion.\ncategory: physics\nversion: 1.0.0\nauthor: Synthetic Sciences\nlicense: MIT\ntags: [Wave Equation, FDTD, Acoustics, Electromagnetics, Propagation, Simulation]\ndependencies: [\"scipy>=1.11.0\", \"numpy>=1.24.0\", \"matplotlib>=3.7.0\"]\n---\n\n# Wave Propagation\n\n## Overview\n\nSimulate wave propagation using finite-difference time-domain (FDTD) and spectral methods. Supports acoustic, electromagnetic, and elastic waves with various source types, boundary conditions, and media.\n\n## When to Use\n\n- Simulating sound, light, seismic, or water waves\n- Wave scattering from obstacles\n- Resonance and standing wave analysis\n- Waveguide and cavity problems\n- Time-domain pulse propagation\n\n## Core Workflows\n\n### 1. 1D Wave Equation (FDTD)\n\n$$\\frac{\\partial^2 u}{\\partial t^2} = c^2 \\frac{\\partial^2 u}{\\partial x^2}$$\n\n```python\nimport numpy as np\nimport matplotlib.pyplot as plt\n\ndef wave_1d_fdtd(Nx=1000, Nt=2000, c=1.0, dx=0.01, CFL=0.9,\n                  source_pos=0.2, source_freq=5.0, bc='absorbing'):\n    \"\"\"\n    1D wave equation solver using FDTD (leapfrog in time).\n    CFL condition: c*dt\u002Fdx ≤ 1\n    \"\"\"\n    dt = CFL * dx \u002F c\n    x = np.arange(Nx) * dx\n\n    # Fields: u at three time levels\n    u_prev = np.zeros(Nx)\n    u_curr = np.zeros(Nx)\n    u_next = np.zeros(Nx)\n\n    r2 = (c * dt \u002F dx)**2  # CFL number squared\n    print(f\"CFL = {c*dt\u002Fdx:.4f}, dt = {dt:.6f}\")\n\n    source_idx = int(source_pos \u002F dx)\n    snapshots = []\n\n    for n in range(Nt):\n        t = n * dt\n\n        # Interior update\n        u_next[1:-1] = (2*u_curr[1:-1] - u_prev[1:-1] +\n                        r2 * (u_curr[2:] - 2*u_curr[1:-1] + u_curr[:-2]))\n\n        # Source: Ricker wavelet\n        t0 = 1.0 \u002F source_freq\n        source = (1 - 2*(np.pi*source_freq*(t - t0))**2) * \\\n                 np.exp(-(np.pi*source_freq*(t - t0))**2)\n        u_next[source_idx] += dt**2 * source\n\n        # Boundary conditions\n        if bc == 'absorbing':\n            # Mur first-order ABC\n            u_next[0] = u_curr[1] + (c*dt - dx)\u002F(c*dt + dx) * (u_next[1] - u_curr[0])\n            u_next[-1] = u_curr[-2] + (c*dt - dx)\u002F(c*dt + dx) * (u_next[-2] - u_curr[-1])\n        elif bc == 'fixed':\n            u_next[0] = 0\n            u_next[-1] = 0\n        elif bc == 'periodic':\n            u_next[0] = u_next[-2]\n            u_next[-1] = u_next[1]\n\n        u_prev = u_curr.copy()\n        u_curr = u_next.copy()\n\n        if n % (Nt \u002F\u002F 10) == 0:\n            snapshots.append((t, u_curr.copy()))\n\n    return x, snapshots\n\nx, snaps = wave_1d_fdtd()\n\nfig, ax = plt.subplots(figsize=(12, 6))\nfor t, u in snaps:\n    ax.plot(x, u + t*0.3, linewidth=0.8, label=f't={t:.3f}')\nax.set_xlabel('x [m]')\nax.set_ylabel('u (offset by time)')\nax.set_title('1D Wave Propagation (Ricker Source, Absorbing BCs)')\nax.legend(ncol=2, fontsize=8)\nax.grid(True, alpha=0.3)\nplt.savefig('wave_1d.png', dpi=150, bbox_inches='tight')\n```\n\n### 2. 2D Wave Equation\n\n```python\ndef wave_2d_fdtd(Nx=200, Ny=200, Nt=500, c=1.0, dx=0.01, CFL=0.7):\n    \"\"\"2D wave equation using FDTD.\"\"\"\n    dt = CFL * dx \u002F (c * np.sqrt(2))  # 2D CFL\n\n    u_prev = np.zeros((Nx, Ny))\n    u_curr = np.zeros((Nx, Ny))\n    u_next = np.zeros((Nx, Ny))\n\n    r2 = (c * dt \u002F dx)**2\n    source_i, source_j = Nx \u002F\u002F 4, Ny \u002F\u002F 2\n\n    snapshots = []\n\n    for n in range(Nt):\n        t = n * dt\n\n        # Interior\n        u_next[1:-1, 1:-1] = (\n            2*u_curr[1:-1, 1:-1] - u_prev[1:-1, 1:-1] + r2 * (\n                u_curr[2:, 1:-1] + u_curr[:-2, 1:-1] +\n                u_curr[1:-1, 2:] + u_curr[1:-1, :-2] -\n                4*u_curr[1:-1, 1:-1]\n            )\n        )\n\n        # Source\n        freq = 10.0\n        t0 = 0.1\n        source = (1 - 2*(np.pi*freq*(t-t0))**2) * np.exp(-(np.pi*freq*(t-t0))**2)\n        u_next[source_i, source_j] += dt**2 * source\n\n        # Absorbing BCs (simple)\n        u_next[0, :] = u_next[1, :]\n        u_next[-1, :] = u_next[-2, :]\n        u_next[:, 0] = u_next[:, 1]\n        u_next[:, -1] = u_next[:, -2]\n\n        u_prev = u_curr.copy()\n        u_curr = u_next.copy()\n\n        if n % (Nt \u002F\u002F 6) == 0:\n            snapshots.append((t, u_curr.copy()))\n\n    return snapshots\n\nsnaps_2d = wave_2d_fdtd()\n\nfig, axes = plt.subplots(2, 3, figsize=(15, 10))\nfor ax, (t, u) in zip(axes.flat, snaps_2d):\n    im = ax.imshow(u.T, cmap='RdBu_r', vmin=-0.01, vmax=0.01,\n                    origin='lower', extent=[0, 2, 0, 2])\n    ax.set_title(f't = {t:.3f} s')\n    ax.set_xlabel('x [m]')\n    ax.set_ylabel('y [m]')\nplt.suptitle('2D Wave Propagation')\nplt.tight_layout()\nplt.savefig('wave_2d.png', dpi=150, bbox_inches='tight')\n```\n\n### 3. Spectral Method (Periodic Waves)\n\n```python\ndef wave_spectral(N=256, L=2*np.pi, T=10, c=1.0, dt=0.01):\n    \"\"\"Wave equation via pseudospectral method (periodic BC).\"\"\"\n    x = np.linspace(0, L, N, endpoint=False)\n    k = np.fft.fftfreq(N, d=L\u002FN) * 2 * np.pi\n\n    # Initial: Gaussian pulse\n    u = np.exp(-((x - L\u002F2)**2) \u002F 0.05)\n    v = np.zeros(N)  # du\u002Fdt = 0\n\n    u_hat = np.fft.fft(u)\n    v_hat = np.fft.fft(v)\n    omega2 = (c * k)**2\n\n    Nt = int(T \u002F dt)\n    snaps = [(0, u.copy())]\n\n    for n in range(Nt):\n        # Leapfrog in Fourier space\n        v_hat -= dt * omega2 * u_hat\n        u_hat += dt * v_hat\n\n        if (n+1) % (Nt \u002F\u002F 8) == 0:\n            snaps.append(((n+1)*dt, np.real(np.fft.ifft(u_hat))))\n\n    return x, snaps\n```\n\n### 4. Dispersion Relation Analysis\n\n```python\ndef measure_dispersion(simulation_data, dx, dt):\n    \"\"\"\n    Measure dispersion relation from simulation data.\n    Compute 2D FFT (space-time) to get ω(k).\n    \"\"\"\n    # 2D FFT\n    ft = np.fft.fft2(simulation_data)\n    ft_shifted = np.fft.fftshift(ft)\n\n    Nt, Nx = simulation_data.shape\n    k = np.fft.fftshift(np.fft.fftfreq(Nx, d=dx)) * 2 * np.pi\n    omega = np.fft.fftshift(np.fft.fftfreq(Nt, d=dt)) * 2 * np.pi\n\n    plt.figure(figsize=(8, 6))\n    plt.pcolormesh(k, omega, np.log10(np.abs(ft_shifted)**2 + 1e-20),\n                    cmap='hot', shading='auto')\n    plt.plot(k, np.abs(k), 'w--', linewidth=1, label='ω = c|k| (exact)')\n    plt.xlabel('Wavenumber k [rad\u002Fm]')\n    plt.ylabel('Frequency ω [rad\u002Fs]')\n    plt.title('Dispersion Relation')\n    plt.colorbar(label='log₁₀|FFT|²')\n    plt.legend()\n    plt.savefig('dispersion.png', dpi=150)\n```\n\n## CFL Stability Conditions\n\n| Dimension | Condition | Notes |\n|---|---|---|\n| 1D | c·dt\u002Fdx ≤ 1 | Exact for FDTD |\n| 2D | c·dt\u002Fdx ≤ 1\u002F√2 | Square grid |\n| 3D | c·dt\u002Fdx ≤ 1\u002F√3 | Cubic grid |\n\n## Source Types\n\n| Source | Formula | Use For |\n|---|---|---|\n| Ricker wavelet | (1-2(πft₀)²)exp(-(πft₀)²) | Seismic, broadband pulse |\n| Gaussian pulse | exp(-t²\u002F2σ²) | Simple test pulse |\n| Sine burst | sin(2πft) × window | Narrowband excitation |\n| Point source | δ(x-x₀)·s(t) | Monopole radiation |\n\n## Troubleshooting\n\n| Symptom | Fix |\n|---|---|\n| Solution blows up | CFL violation — reduce dt |\n| Reflections from boundary | Use absorbing BC (Mur, PML) |\n| Numerical dispersion | Reduce dx (need ~10-20 points per wavelength) |\n| Spectral ringing | Smooth the source function |\n","# Wave Propagation\n\n## Overview\n\nSimulate wave propagation using finite-difference time-domain (FDTD) and spectral methods. Supports acoustic, electromagnetic, and elastic waves with various source types, boundary conditions, and media.\n\n## When to Use\n\n- Simulating sound, light, seismic, or water waves\n- Wave scattering from obstacles\n- Resonance and standing wave analysis\n- Waveguide and cavity problems\n- Time-domain pulse propagation\n\n## Core Workflows\n\n### 1. 1D Wave Equation (FDTD)\n\n$$\\frac{\\partial^2 u}{\\partial t^2} = c^2 \\frac{\\partial^2 u}{\\partial x^2}$$\n\n```python\nimport numpy as np\nimport matplotlib.pyplot as plt\n\ndef wave_1d_fdtd(Nx=1000, Nt=2000, c=1.0, dx=0.01, CFL=0.9,\n                  source_pos=0.2, source_freq=5.0, bc='absorbing'):\n    \"\"\"\n    1D wave equation solver using FDTD (leapfrog in time).\n    CFL condition: c*dt\u002Fdx ≤ 1\n    \"\"\"\n    dt = CFL * dx \u002F c\n    x = np.arange(Nx) * dx\n\n    # Fields: u at three time levels\n    u_prev = np.zeros(Nx)\n    u_curr = np.zeros(Nx)\n    u_next = np.zeros(Nx)\n\n    r2 = (c * dt \u002F dx)**2  # CFL number squared\n    print(f\"CFL = {c*dt\u002Fdx:.4f}, dt = {dt:.6f}\")\n\n    source_idx = int(source_pos \u002F dx)\n    snapshots = []\n\n    for n in range(Nt):\n        t = n * dt\n\n        # Interior update\n        u_next[1:-1] = (2*u_curr[1:-1] - u_prev[1:-1] +\n                        r2 * (u_curr[2:] - 2*u_curr[1:-1] + u_curr[:-2]))\n\n        # Source: Ricker wavelet\n        t0 = 1.0 \u002F source_freq\n        source = (1 - 2*(np.pi*source_freq*(t - t0))**2) * \\\n                 np.exp(-(np.pi*source_freq*(t - t0))**2)\n        u_next[source_idx] += dt**2 * source\n\n        # Boundary conditions\n        if bc == 'absorbing':\n            # Mur first-order ABC\n            u_next[0] = u_curr[1] + (c*dt - dx)\u002F(c*dt + dx) * (u_next[1] - u_curr[0])\n            u_next[-1] = u_curr[-2] + (c*dt - dx)\u002F(c*dt + dx) * (u_next[-2] - u_curr[-1])\n        elif bc == 'fixed':\n            u_next[0] = 0\n            u_next[-1] = 0\n        elif bc == 'periodic':\n            u_next[0] = u_next[-2]\n            u_next[-1] = u_next[1]\n\n        u_prev = u_curr.copy()\n        u_curr = u_next.copy()\n\n        if n % (Nt \u002F\u002F 10) == 0:\n            snapshots.append((t, u_curr.copy()))\n\n    return x, snapshots\n\nx, snaps = wave_1d_fdtd()\n\nfig, ax = plt.subplots(figsize=(12, 6))\nfor t, u in snaps:\n    ax.plot(x, u + t*0.3, linewidth=0.8, label=f't={t:.3f}')\nax.set_xlabel('x [m]')\nax.set_ylabel('u (offset by time)')\nax.set_title('1D Wave Propagation (Ricker Source, Absorbing BCs)')\nax.legend(ncol=2, fontsize=8)\nax.grid(True, alpha=0.3)\nplt.savefig('wave_1d.png', dpi=150, bbox_inches='tight')\n```\n\n### 2. 2D Wave Equation\n\n```python\ndef wave_2d_fdtd(Nx=200, Ny=200, Nt=500, c=1.0, dx=0.01, CFL=0.7):\n    \"\"\"2D wave equation using FDTD.\"\"\"\n    dt = CFL * dx \u002F (c * np.sqrt(2))  # 2D CFL\n\n    u_prev = np.zeros((Nx, Ny))\n    u_curr = np.zeros((Nx, Ny))\n    u_next = np.zeros((Nx, Ny))\n\n    r2 = (c * dt \u002F dx)**2\n    source_i, source_j = Nx \u002F\u002F 4, Ny \u002F\u002F 2\n\n    snapshots = []\n\n    for n in range(Nt):\n        t = n * dt\n\n        # Interior\n        u_next[1:-1, 1:-1] = (\n            2*u_curr[1:-1, 1:-1] - u_prev[1:-1, 1:-1] + r2 * (\n                u_curr[2:, 1:-1] + u_curr[:-2, 1:-1] +\n                u_curr[1:-1, 2:] + u_curr[1:-1, :-2] -\n                4*u_curr[1:-1, 1:-1]\n            )\n        )\n\n        # Source\n        freq = 10.0\n        t0 = 0.1\n        source = (1 - 2*(np.pi*freq*(t-t0))**2) * np.exp(-(np.pi*freq*(t-t0))**2)\n        u_next[source_i, source_j] += dt**2 * source\n\n        # Absorbing BCs (simple)\n        u_next[0, :] = u_next[1, :]\n        u_next[-1, :] = u_next[-2, :]\n        u_next[:, 0] = u_next[:, 1]\n        u_next[:, -1] = u_next[:, -2]\n\n        u_prev = u_curr.copy()\n        u_curr = u_next.copy()\n\n        if n % (Nt \u002F\u002F 6) == 0:\n            snapshots.append((t, u_curr.copy()))\n\n    return snapshots\n\nsnaps_2d = wave_2d_fdtd()\n\nfig, axes = plt.subplots(2, 3, figsize=(15, 10))\nfor ax, (t, u) in zip(axes.flat, snaps_2d):\n    im = ax.imshow(u.T, cmap='RdBu_r', vmin=-0.01, vmax=0.01,\n                    origin='lower', extent=[0, 2, 0, 2])\n    ax.set_title(f't = {t:.3f} s')\n    ax.set_xlabel('x [m]')\n    ax.set_ylabel('y [m]')\nplt.suptitle('2D Wave Propagation')\nplt.tight_layout()\nplt.savefig('wave_2d.png', dpi=150, bbox_inches='tight')\n```\n\n### 3. Spectral Method (Periodic Waves)\n\n```python\ndef wave_spectral(N=256, L=2*np.pi, T=10, c=1.0, dt=0.01):\n    \"\"\"Wave equation via pseudospectral method (periodic BC).\"\"\"\n    x = np.linspace(0, L, N, endpoint=False)\n    k = np.fft.fftfreq(N, d=L\u002FN) * 2 * np.pi\n\n    # Initial: Gaussian pulse\n    u = np.exp(-((x - L\u002F2)**2) \u002F 0.05)\n    v = np.zeros(N)  # du\u002Fdt = 0\n\n    u_hat = np.fft.fft(u)\n    v_hat = np.fft.fft(v)\n    omega2 = (c * k)**2\n\n    Nt = int(T \u002F dt)\n    snaps = [(0, u.copy())]\n\n    for n in range(Nt):\n        # Leapfrog in Fourier space\n        v_hat -= dt * omega2 * u_hat\n        u_hat += dt * v_hat\n\n        if (n+1) % (Nt \u002F\u002F 8) == 0:\n            snaps.append(((n+1)*dt, np.real(np.fft.ifft(u_hat))))\n\n    return x, snaps\n```\n\n### 4. Dispersion Relation Analysis\n\n```python\ndef measure_dispersion(simulation_data, dx, dt):\n    \"\"\"\n    Measure dispersion relation from simulation data.\n    Compute 2D FFT (space-time) to get ω(k).\n    \"\"\"\n    # 2D FFT\n    ft = np.fft.fft2(simulation_data)\n    ft_shifted = np.fft.fftshift(ft)\n\n    Nt, Nx = simulation_data.shape\n    k = np.fft.fftshift(np.fft.fftfreq(Nx, d=dx)) * 2 * np.pi\n    omega = np.fft.fftshift(np.fft.fftfreq(Nt, d=dt)) * 2 * np.pi\n\n    plt.figure(figsize=(8, 6))\n    plt.pcolormesh(k, omega, np.log10(np.abs(ft_shifted)**2 + 1e-20),\n                    cmap='hot', shading='auto')\n    plt.plot(k, np.abs(k), 'w--', linewidth=1, label='ω = c|k| (exact)')\n    plt.xlabel('Wavenumber k [rad\u002Fm]')\n    plt.ylabel('Frequency ω [rad\u002Fs]')\n    plt.title('Dispersion Relation')\n    plt.colorbar(label='log₁₀|FFT|²')\n    plt.legend()\n    plt.savefig('dispersion.png', dpi=150)\n```\n\n## CFL Stability Conditions\n\n| Dimension | Condition | Notes |\n|---|---|---|\n| 1D | c·dt\u002Fdx ≤ 1 | Exact for FDTD |\n| 2D | c·dt\u002Fdx ≤ 1\u002F√2 | Square grid |\n| 3D | c·dt\u002Fdx ≤ 1\u002F√3 | Cubic grid |\n\n## Source Types\n\n| Source | Formula | Use For |\n|---|---|---|\n| Ricker wavelet | (1-2(πft₀)²)exp(-(πft₀)²) | Seismic, broadband pulse |\n| Gaussian pulse | exp(-t²\u002F2σ²) | Simple test pulse |\n| Sine burst | sin(2πft) × window | Narrowband excitation |\n| Point source | δ(x-x₀)·s(t) | Monopole radiation |\n\n## Troubleshooting\n\n| Symptom | Fix |\n|---|---|\n| Solution blows up | CFL violation — reduce dt |\n| Reflections from boundary | Use absorbing BC (Mur, PML) |\n| Numerical dispersion | Reduce dx (need ~10-20 points per wavelength) |\n| Spectral ringing | Smooth the source function |\n",{"name":5,"tags":44,"author":49,"license":15,"version":50,"category":34,"description":7,"dependencies":51},[23,22,45,46,47,48],"Acoustics","Electromagnetics","Propagation","Simulation","Synthetic Sciences","1.0.0",[52,53,54],"scipy>=1.11.0","numpy>=1.24.0","matplotlib>=3.7.0","main","4aa39efd1cdab0b4657ecee16c92a92011a5b10f","openscience\u002Fbackend\u002Fcli\u002Fskills\u002Fphysics\u002Fwave-propagation","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub","https:\u002F\u002Fgithub.com\u002Ffadrienne","2026-10-28 00:43:09",{"source":8,"skillName":5,"commands":62,"prompt":72,"zipAvailable":73},[63,66,69],{"tool":64,"command":65},"npx","npx skills add fadrienne\u002FMyGitHub --skill wave-propagation",{"tool":67,"command":68},"bunx","bunx skills add fadrienne\u002FMyGitHub --skill wave-propagation",{"tool":70,"command":71},"pnpm","pnpm dlx skills add fadrienne\u002FMyGitHub --skill wave-propagation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fopenscience\u002Fbackend\u002Fcli\u002Fskills\u002Fphysics\u002Fwave-propagation\u002FSKILL.md",true,[],[76,106,131,165,192,219],{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":87,"publishedAt":39},"01M7167B28PK20HP7R7ZED2DY0","statistical-power","Sample size calculation, power analysis, and effect size conversion for scientific studies. Use BEFORE data collection (a priori) to determine required N, or after (post-hoc) to compute achieved power. Covers parametric tests (t-test, ANOVA, chi-square, proportions, correlation, regression), simulation-based power for complex\u002Fclustered\u002Fnested designs, and power curves. Use this skill when someone asks 'how many samples do I need', 'what is my power', 'what effect size can I detect', or any variant. Pairs with \u002Fexperimental-design (choose design first, then compute power) and \u002Fstatistical-analysis (analyze data after collection).","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fstatistical-power\u002FSKILL.md",[82],{"categoryNo":83,"categoryName":84,"taxonomyType":85,"taxonomyTypeDesc":86},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[88,89,90,35,91,92,93,94,95,96,97,98,99,100,101,102,103,104,38,105],"power","statistical power","effect","regression","choose","design","uv","when","Bash","collection","analysis","calculation","ANOVA","conversion","analyze","t-test","chi-square","sample",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":115,"publishedAt":39},"01M71677EBCM8EPCE9BZCK8505","statistical-analysis","Guided statistical analysis with test selection and reporting. Use when you need help choosing appropriate tests for your data, assumption checking, power analysis, and APA-formatted results. Best for academic research reporting, test selection guidance. For implementing specific models programmatically use statsmodels.","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fstatistical-analysis\u002FSKILL.md",[112],{"categoryNo":113,"categoryName":114,"taxonomyType":85,"taxonomyTypeDesc":86},"01JBSEEDCAT000000000000008","测试与质量",[98,116,88,117,118,119,95,120,121,122,26,123,124,27,125,126,127,128,129,130],"statistical analysis","academic research","implementing","selection","you","reporting","data","tests","use","test","research","results","statsmodels","models","help",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":146,"publishedAt":39},"01M71673R93XAHFH81DBNVNG7H","scientific-writing","Core skill for the deep research and writing tool. Write scientific manuscripts in full paragraphs (never bullet points). Use two-stage process with (1) section outlines with key points using research-lookup then (2) convert to flowing prose. IMRAD structure, citations (APA\u002FAMA\u002FVancouver), figures\u002Ftables, reporting guidelines (CONSORT\u002FSTROBE\u002FPRISMA), for research papers and journal submissions.","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fscientific-writing\u002FSKILL.md",[137,140,141],{"categoryNo":138,"categoryName":139,"taxonomyType":85,"taxonomyTypeDesc":86},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":83,"categoryName":84,"taxonomyType":85,"taxonomyTypeDesc":86},{"categoryNo":142,"categoryName":143,"taxonomyType":144,"taxonomyTypeDesc":145},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[147,148,149,150,151,152,153,154,155,156,96,157,158,159,160,161,162,163,121,164],"writing","scientific","scientific writing","Citations","deep","deep research","never","papers","journal","false","api","prisma","structure","openrouter","Outlines","core skill","read","features",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":175,"publishedAt":39},"01M7166ZPKXBF4EBPHVTJPQBB1","scientific-visualization","Meta-skill for publication-ready figures. Use when creating journal submission figures requiring multi-panel layouts, significance annotations, error bars, colorblind-safe palettes, and specific journal formatting (Nature, Science, Cell). Orchestrates matplotlib\u002Fseaborn\u002Fplotly with publication styles. For quick exploration use seaborn or plotly directly.","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fscientific-visualization\u002FSKILL.md",[171,174],{"categoryNo":172,"categoryName":173,"taxonomyType":85,"taxonomyTypeDesc":86},"01JBSEEDCAT000000000000013","分析与可视化",{"categoryNo":83,"categoryName":84,"taxonomyType":85,"taxonomyTypeDesc":86},[176,148,177,178,179,180,181,182,183,155,95,184,185,186,187,188,189,190,26,191],"visualization","scientific visualization","error","ready","quick","exploration","meta-skill","Meta","safe","plotly","annotations","formatting","Publication","figures","panel","submission",{"skillNo":193,"name":194,"nameZh":6,"description":195,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":196,"categories":197,"keywords":204,"publishedAt":39},"01M7166VXJWQSSC3RQZP60WBGR","research-code","Debug, profile, review, and restructure Python research and analysis code. Use when analysis scripts crash, produce wrong results, run too slowly, or need a correctness review. Covers: reading tracebacks and diagnosing root causes, hypothesis-driven debugging, reviewing code for common statistical\u002Fnumerical errors, profiling data pipelines, improving reproducibility (seeds, environments, determinism), and structuring analysis scripts for sharing. Distinct from \u002Fexploratory-data-analysis (which understands data) and \u002Fstatistical-analysis (which chooses and runs tests) — this skill focuses on the code itself.","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fresearch-code\u002FSKILL.md",[198,201],{"categoryNo":199,"categoryName":200,"taxonomyType":85,"taxonomyTypeDesc":86},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":202,"categoryName":203,"taxonomyType":144,"taxonomyTypeDesc":145},"01JBSEEDCAT000000000000030","开发工程师",[205,206,126,207,208,209,210,94,211,95,96,98,212,213,214,215,216,217,163,218],"code","research code","which","memory","data-analysis","errors","debugging","common","review","data pipelines","run","scripts","line","write",{"skillNo":220,"name":221,"nameZh":6,"description":222,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":223,"licenseFileUrl":6,"sourceHtmlUrl":224,"categories":225,"keywords":232,"publishedAt":39},"01M7166CF5HSR7SVZYZFWTDX55","markdown-mermaid-writing","Comprehensive markdown and Mermaid diagram writing skill. Use when creating any scientific document, report, analysis, or visualization. Establishes text-based diagrams as the default documentation standard with full style guides (markdown + mermaid), 24 diagram type references, and 9 document templates.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fmarkdown-mermaid-writing\u002FSKILL.md",[226,229,230,231],{"categoryNo":227,"categoryName":228,"taxonomyType":85,"taxonomyTypeDesc":86},"01JBSEEDCAT000000000000002","文档处理",{"categoryNo":138,"categoryName":139,"taxonomyType":85,"taxonomyTypeDesc":86},{"categoryNo":83,"categoryName":84,"taxonomyType":85,"taxonomyTypeDesc":86},{"categoryNo":142,"categoryName":143,"taxonomyType":144,"taxonomyTypeDesc":145},[147,233,234,235,236,237,176,238,239,95,96,98,240,241,242,243,244,245,148,163],"markdown mermaid writing","mermaid","markdown","community","diagrams","project","default","team","guides","text","documentation","references","diagram"]