{
  "schemaVersion": "1.0",
  "item": {
    "slug": "scipy",
    "name": "SciPy",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/ivangdavila/scipy",
    "canonicalUrl": "https://clawhub.ai/ivangdavila/scipy",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/scipy",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=scipy",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "memory-template.md",
      "setup.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/scipy"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/scipy",
    "agentPageUrl": "https://openagent3.xyz/skills/scipy/agent",
    "manifestUrl": "https://openagent3.xyz/skills/scipy/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/scipy/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Setup",
        "body": "On first use, read setup.md for guidance on how to help the user effectively."
      },
      {
        "title": "When to Use",
        "body": "User needs scientific computing in Python: optimization, curve fitting, statistical tests, signal processing, interpolation, integration, or linear algebra. Agent provides working code, not theory."
      },
      {
        "title": "Architecture",
        "body": "This skill is stateless — no persistent storage needed. All code runs in user's Python environment.\n\nSee memory-template.md for optional preference tracking."
      },
      {
        "title": "Quick Reference",
        "body": "TopicFileUsage guidancesetup.mdOptional preferencesmemory-template.md"
      },
      {
        "title": "1. Working Code First",
        "body": "Every response includes runnable code. No pseudocode, no \"implement this yourself\".\n\n# Always include imports\nfrom scipy import optimize\nimport numpy as np\n\n# Complete, working example\nresult = optimize.minimize(lambda x: x**2, x0=1.0)\nprint(f\"Minimum at x={result.x[0]:.4f}\")"
      },
      {
        "title": "2. Module Selection Guide",
        "body": "ProblemModuleKey FunctionFind minimum/maximumscipy.optimizeminimize, minimize_scalarCurve fittingscipy.optimizecurve_fitRoot findingscipy.optimizeroot, brentq, fsolveStatistical testsscipy.statsttest_ind, chi2_contingencyDistributionsscipy.statsnorm, poisson, exponFilter signalsscipy.signalbutter, filtfilt, savgol_filterFFTscipy.fftfft, ifft, fftfreqInterpolationscipy.interpolateinterp1d, UnivariateSplineIntegrationscipy.integratequad, solve_ivpLinear algebrascipy.linalgsolve, eig, svdSparse matricesscipy.sparsecsr_matrix, linalg.spsolveSpatial datascipy.spatialKDTree, distanceImage processingscipy.ndimagegaussian_filter, label"
      },
      {
        "title": "3. Explain Key Parameters",
        "body": "When code uses non-obvious parameters, explain why:\n\n# method='L-BFGS-B' for bounded optimization\n# bounds prevent physically impossible values\nresult = optimize.minimize(\n    objective, x0, \n    method='L-BFGS-B',\n    bounds=[(0, None), (0, 100)]  # x1 >= 0, 0 <= x2 <= 100\n)"
      },
      {
        "title": "4. Validate Results",
        "body": "Always include sanity checks:\n\nresult = optimize.minimize(func, x0)\nif not result.success:\n    print(f\"⚠️ Optimization failed: {result.message}\")\nelse:\n    print(f\"✓ Converged in {result.nit} iterations\")"
      },
      {
        "title": "5. NumPy Integration",
        "body": "SciPy builds on NumPy. Use vectorized operations:\n\n# ✓ Vectorized (fast)\nx = np.linspace(0, 10, 1000)\ny = np.sin(x)\n\n# ✗ Loop (slow)\ny = [np.sin(xi) for xi in x]"
      },
      {
        "title": "Minimize a Function",
        "body": "from scipy.optimize import minimize\nimport numpy as np\n\n# Rosenbrock function (classic test)\ndef rosenbrock(x):\n    return sum(100*(x[1:]-x[:-1]**2)**2 + (1-x[:-1])**2)\n\nx0 = np.array([0, 0])\nresult = minimize(rosenbrock, x0, method='BFGS')\n\nprint(f\"Minimum at: {result.x}\")\nprint(f\"Function value: {result.fun}\")\nprint(f\"Converged: {result.success}\")"
      },
      {
        "title": "Constrained Optimization",
        "body": "from scipy.optimize import minimize\n\n# Minimize f(x,y) = x² + y² subject to x + y = 1\ndef objective(x):\n    return x[0]**2 + x[1]**2\n\ndef constraint(x):\n    return x[0] + x[1] - 1  # Must equal 0\n\nresult = minimize(\n    objective, \n    x0=[0.5, 0.5],\n    constraints={'type': 'eq', 'fun': constraint}\n)"
      },
      {
        "title": "Curve Fitting",
        "body": "from scipy.optimize import curve_fit\nimport numpy as np\n\n# Fit exponential decay\ndef model(t, a, tau):\n    return a * np.exp(-t / tau)\n\nt_data = np.array([0, 1, 2, 3, 4, 5])\ny_data = np.array([10, 6.1, 3.7, 2.2, 1.4, 0.8])\n\nparams, covariance = curve_fit(model, t_data, y_data)\na_fit, tau_fit = params\nerrors = np.sqrt(np.diag(covariance))\n\nprint(f\"a = {a_fit:.2f} ± {errors[0]:.2f}\")\nprint(f\"τ = {tau_fit:.2f} ± {errors[1]:.2f}\")"
      },
      {
        "title": "Hypothesis Testing",
        "body": "from scipy import stats\n\n# Compare two groups (independent t-test)\ngroup_a = [23, 25, 28, 24, 26]\ngroup_b = [30, 32, 29, 31, 33]\n\nt_stat, p_value = stats.ttest_ind(group_a, group_b)\nprint(f\"t = {t_stat:.3f}, p = {p_value:.4f}\")\n\nif p_value < 0.05:\n    print(\"✓ Significant difference (p < 0.05)\")\nelse:\n    print(\"✗ No significant difference\")"
      },
      {
        "title": "Distribution Fitting",
        "body": "from scipy import stats\nimport numpy as np\n\ndata = np.random.exponential(scale=2.0, size=1000)\n\n# Fit exponential distribution\nloc, scale = stats.expon.fit(data)\nprint(f\"Fitted scale (λ⁻¹): {scale:.3f}\")\n\n# Test goodness of fit\nks_stat, ks_p = stats.kstest(data, 'expon', args=(loc, scale))\nprint(f\"KS test: p = {ks_p:.4f}\")"
      },
      {
        "title": "Confidence Intervals",
        "body": "from scipy import stats\nimport numpy as np\n\ndata = [2.3, 2.5, 2.1, 2.8, 2.4, 2.6, 2.2]\nconfidence = 0.95\n\nmean = np.mean(data)\nsem = stats.sem(data)\nci = stats.t.interval(confidence, len(data)-1, loc=mean, scale=sem)\n\nprint(f\"Mean: {mean:.2f}\")\nprint(f\"95% CI: [{ci[0]:.2f}, {ci[1]:.2f}]\")"
      },
      {
        "title": "Low-Pass Filter",
        "body": "from scipy import signal\nimport numpy as np\n\n# Create noisy signal\nfs = 1000  # Sample rate\nt = np.linspace(0, 1, fs)\nclean = np.sin(2 * np.pi * 10 * t)  # 10 Hz\nnoisy = clean + 0.5 * np.random.randn(len(t))\n\n# Design and apply Butterworth filter\ncutoff = 20  # Hz\norder = 4\nb, a = signal.butter(order, cutoff / (fs/2), btype='low')\nfiltered = signal.filtfilt(b, a, noisy)  # Zero-phase filtering"
      },
      {
        "title": "FFT Analysis",
        "body": "from scipy.fft import fft, fftfreq\nimport numpy as np\n\n# Sample signal\nfs = 1000\nt = np.linspace(0, 1, fs)\nsignal_data = np.sin(2*np.pi*50*t) + 0.5*np.sin(2*np.pi*120*t)\n\n# Compute FFT\nyf = fft(signal_data)\nxf = fftfreq(len(t), 1/fs)\n\n# Get magnitude spectrum (positive frequencies only)\nn = len(t) // 2\nfreqs = xf[:n]\nmagnitudes = 2/n * np.abs(yf[:n])\n\n# Find dominant frequency\npeak_idx = np.argmax(magnitudes)\nprint(f\"Dominant frequency: {freqs[peak_idx]:.1f} Hz\")"
      },
      {
        "title": "1D Interpolation",
        "body": "from scipy.interpolate import interp1d, UnivariateSpline\nimport numpy as np\n\nx = np.array([0, 1, 2, 3, 4, 5])\ny = np.array([0, 0.8, 0.9, 0.1, -0.8, -1])\n\n# Linear interpolation\nf_linear = interp1d(x, y, kind='linear')\n\n# Cubic interpolation (smoother)\nf_cubic = interp1d(x, y, kind='cubic')\n\n# Smoothing spline (handles noise)\nspline = UnivariateSpline(x, y, s=0.5)\n\nx_new = np.linspace(0, 5, 100)\ny_cubic = f_cubic(x_new)"
      },
      {
        "title": "Numerical Integration",
        "body": "from scipy.integrate import quad\nimport numpy as np\n\n# Integrate sin(x) from 0 to π\nresult, error = quad(np.sin, 0, np.pi)\nprint(f\"∫sin(x)dx from 0 to π = {result:.6f} ± {error:.2e}\")\n# Expected: 2.0"
      },
      {
        "title": "Solve ODE",
        "body": "from scipy.integrate import solve_ivp\nimport numpy as np\n\n# dy/dt = -2y, y(0) = 1 (exponential decay)\ndef dydt(t, y):\n    return -2 * y\n\nsol = solve_ivp(dydt, [0, 5], [1], t_eval=np.linspace(0, 5, 100))\n\n# sol.t contains time points\n# sol.y[0] contains y values"
      },
      {
        "title": "Solve Linear System",
        "body": "from scipy import linalg\nimport numpy as np\n\n# Solve Ax = b\nA = np.array([[3, 1], [1, 2]])\nb = np.array([9, 8])\n\nx = linalg.solve(A, b)\nprint(f\"Solution: x = {x}\")\n\n# Verify\nprint(f\"Check A @ x = {A @ x}\")"
      },
      {
        "title": "Eigendecomposition",
        "body": "from scipy import linalg\nimport numpy as np\n\nA = np.array([[1, 2], [2, 1]])\neigenvalues, eigenvectors = linalg.eig(A)\n\nprint(f\"Eigenvalues: {eigenvalues}\")\nprint(f\"Eigenvectors:\\n{eigenvectors}\")"
      },
      {
        "title": "Common Traps",
        "body": "Wrong bounds format in minimize → bounds must be list of (min, max) tuples, one per variable\nForgetting to check result.success → optimization can fail silently, always check\nUsing interp1d outside data range → raises error by default, use fill_value='extrapolate' or bounds_error=False\nfiltfilt vs lfilter → use filtfilt for zero-phase filtering, lfilter introduces phase shift\ncurve_fit with bad initial guess → can converge to wrong solution, always provide reasonable p0\nInteger division in Python 3 → use x / 2 not x // 2 for float division in formulas"
      },
      {
        "title": "Security & Privacy",
        "body": "Data that stays local:\n\nAll computations run in user's Python environment\nNo data leaves the machine\n\nThis skill does NOT:\n\nSend data externally\nCreate persistent files\nAccess network resources"
      },
      {
        "title": "Related Skills",
        "body": "Install with clawhub install <slug> if user confirms:\n\nmath — mathematical concepts\ndata-analysis — data exploration\ndata — data handling patterns"
      },
      {
        "title": "Feedback",
        "body": "If useful: clawhub star scipy\nStay updated: clawhub sync"
      }
    ],
    "body": "Setup\n\nOn first use, read setup.md for guidance on how to help the user effectively.\n\nWhen to Use\n\nUser needs scientific computing in Python: optimization, curve fitting, statistical tests, signal processing, interpolation, integration, or linear algebra. Agent provides working code, not theory.\n\nArchitecture\n\nThis skill is stateless — no persistent storage needed. All code runs in user's Python environment.\n\nSee memory-template.md for optional preference tracking.\n\nQuick Reference\nTopic\tFile\nUsage guidance\tsetup.md\nOptional preferences\tmemory-template.md\nCore Rules\n1. Working Code First\n\nEvery response includes runnable code. No pseudocode, no \"implement this yourself\".\n\n# Always include imports\nfrom scipy import optimize\nimport numpy as np\n\n# Complete, working example\nresult = optimize.minimize(lambda x: x**2, x0=1.0)\nprint(f\"Minimum at x={result.x[0]:.4f}\")\n\n2. Module Selection Guide\nProblem\tModule\tKey Function\nFind minimum/maximum\tscipy.optimize\tminimize, minimize_scalar\nCurve fitting\tscipy.optimize\tcurve_fit\nRoot finding\tscipy.optimize\troot, brentq, fsolve\nStatistical tests\tscipy.stats\tttest_ind, chi2_contingency\nDistributions\tscipy.stats\tnorm, poisson, expon\nFilter signals\tscipy.signal\tbutter, filtfilt, savgol_filter\nFFT\tscipy.fft\tfft, ifft, fftfreq\nInterpolation\tscipy.interpolate\tinterp1d, UnivariateSpline\nIntegration\tscipy.integrate\tquad, solve_ivp\nLinear algebra\tscipy.linalg\tsolve, eig, svd\nSparse matrices\tscipy.sparse\tcsr_matrix, linalg.spsolve\nSpatial data\tscipy.spatial\tKDTree, distance\nImage processing\tscipy.ndimage\tgaussian_filter, label\n3. Explain Key Parameters\n\nWhen code uses non-obvious parameters, explain why:\n\n# method='L-BFGS-B' for bounded optimization\n# bounds prevent physically impossible values\nresult = optimize.minimize(\n    objective, x0, \n    method='L-BFGS-B',\n    bounds=[(0, None), (0, 100)]  # x1 >= 0, 0 <= x2 <= 100\n)\n\n4. Validate Results\n\nAlways include sanity checks:\n\nresult = optimize.minimize(func, x0)\nif not result.success:\n    print(f\"⚠️ Optimization failed: {result.message}\")\nelse:\n    print(f\"✓ Converged in {result.nit} iterations\")\n\n5. NumPy Integration\n\nSciPy builds on NumPy. Use vectorized operations:\n\n# ✓ Vectorized (fast)\nx = np.linspace(0, 10, 1000)\ny = np.sin(x)\n\n# ✗ Loop (slow)\ny = [np.sin(xi) for xi in x]\n\nOptimization Patterns\nMinimize a Function\nfrom scipy.optimize import minimize\nimport numpy as np\n\n# Rosenbrock function (classic test)\ndef rosenbrock(x):\n    return sum(100*(x[1:]-x[:-1]**2)**2 + (1-x[:-1])**2)\n\nx0 = np.array([0, 0])\nresult = minimize(rosenbrock, x0, method='BFGS')\n\nprint(f\"Minimum at: {result.x}\")\nprint(f\"Function value: {result.fun}\")\nprint(f\"Converged: {result.success}\")\n\nConstrained Optimization\nfrom scipy.optimize import minimize\n\n# Minimize f(x,y) = x² + y² subject to x + y = 1\ndef objective(x):\n    return x[0]**2 + x[1]**2\n\ndef constraint(x):\n    return x[0] + x[1] - 1  # Must equal 0\n\nresult = minimize(\n    objective, \n    x0=[0.5, 0.5],\n    constraints={'type': 'eq', 'fun': constraint}\n)\n\nCurve Fitting\nfrom scipy.optimize import curve_fit\nimport numpy as np\n\n# Fit exponential decay\ndef model(t, a, tau):\n    return a * np.exp(-t / tau)\n\nt_data = np.array([0, 1, 2, 3, 4, 5])\ny_data = np.array([10, 6.1, 3.7, 2.2, 1.4, 0.8])\n\nparams, covariance = curve_fit(model, t_data, y_data)\na_fit, tau_fit = params\nerrors = np.sqrt(np.diag(covariance))\n\nprint(f\"a = {a_fit:.2f} ± {errors[0]:.2f}\")\nprint(f\"τ = {tau_fit:.2f} ± {errors[1]:.2f}\")\n\nStatistics Patterns\nHypothesis Testing\nfrom scipy import stats\n\n# Compare two groups (independent t-test)\ngroup_a = [23, 25, 28, 24, 26]\ngroup_b = [30, 32, 29, 31, 33]\n\nt_stat, p_value = stats.ttest_ind(group_a, group_b)\nprint(f\"t = {t_stat:.3f}, p = {p_value:.4f}\")\n\nif p_value < 0.05:\n    print(\"✓ Significant difference (p < 0.05)\")\nelse:\n    print(\"✗ No significant difference\")\n\nDistribution Fitting\nfrom scipy import stats\nimport numpy as np\n\ndata = np.random.exponential(scale=2.0, size=1000)\n\n# Fit exponential distribution\nloc, scale = stats.expon.fit(data)\nprint(f\"Fitted scale (λ⁻¹): {scale:.3f}\")\n\n# Test goodness of fit\nks_stat, ks_p = stats.kstest(data, 'expon', args=(loc, scale))\nprint(f\"KS test: p = {ks_p:.4f}\")\n\nConfidence Intervals\nfrom scipy import stats\nimport numpy as np\n\ndata = [2.3, 2.5, 2.1, 2.8, 2.4, 2.6, 2.2]\nconfidence = 0.95\n\nmean = np.mean(data)\nsem = stats.sem(data)\nci = stats.t.interval(confidence, len(data)-1, loc=mean, scale=sem)\n\nprint(f\"Mean: {mean:.2f}\")\nprint(f\"95% CI: [{ci[0]:.2f}, {ci[1]:.2f}]\")\n\nSignal Processing Patterns\nLow-Pass Filter\nfrom scipy import signal\nimport numpy as np\n\n# Create noisy signal\nfs = 1000  # Sample rate\nt = np.linspace(0, 1, fs)\nclean = np.sin(2 * np.pi * 10 * t)  # 10 Hz\nnoisy = clean + 0.5 * np.random.randn(len(t))\n\n# Design and apply Butterworth filter\ncutoff = 20  # Hz\norder = 4\nb, a = signal.butter(order, cutoff / (fs/2), btype='low')\nfiltered = signal.filtfilt(b, a, noisy)  # Zero-phase filtering\n\nFFT Analysis\nfrom scipy.fft import fft, fftfreq\nimport numpy as np\n\n# Sample signal\nfs = 1000\nt = np.linspace(0, 1, fs)\nsignal_data = np.sin(2*np.pi*50*t) + 0.5*np.sin(2*np.pi*120*t)\n\n# Compute FFT\nyf = fft(signal_data)\nxf = fftfreq(len(t), 1/fs)\n\n# Get magnitude spectrum (positive frequencies only)\nn = len(t) // 2\nfreqs = xf[:n]\nmagnitudes = 2/n * np.abs(yf[:n])\n\n# Find dominant frequency\npeak_idx = np.argmax(magnitudes)\nprint(f\"Dominant frequency: {freqs[peak_idx]:.1f} Hz\")\n\nInterpolation Patterns\n1D Interpolation\nfrom scipy.interpolate import interp1d, UnivariateSpline\nimport numpy as np\n\nx = np.array([0, 1, 2, 3, 4, 5])\ny = np.array([0, 0.8, 0.9, 0.1, -0.8, -1])\n\n# Linear interpolation\nf_linear = interp1d(x, y, kind='linear')\n\n# Cubic interpolation (smoother)\nf_cubic = interp1d(x, y, kind='cubic')\n\n# Smoothing spline (handles noise)\nspline = UnivariateSpline(x, y, s=0.5)\n\nx_new = np.linspace(0, 5, 100)\ny_cubic = f_cubic(x_new)\n\nIntegration Patterns\nNumerical Integration\nfrom scipy.integrate import quad\nimport numpy as np\n\n# Integrate sin(x) from 0 to π\nresult, error = quad(np.sin, 0, np.pi)\nprint(f\"∫sin(x)dx from 0 to π = {result:.6f} ± {error:.2e}\")\n# Expected: 2.0\n\nSolve ODE\nfrom scipy.integrate import solve_ivp\nimport numpy as np\n\n# dy/dt = -2y, y(0) = 1 (exponential decay)\ndef dydt(t, y):\n    return -2 * y\n\nsol = solve_ivp(dydt, [0, 5], [1], t_eval=np.linspace(0, 5, 100))\n\n# sol.t contains time points\n# sol.y[0] contains y values\n\nLinear Algebra Patterns\nSolve Linear System\nfrom scipy import linalg\nimport numpy as np\n\n# Solve Ax = b\nA = np.array([[3, 1], [1, 2]])\nb = np.array([9, 8])\n\nx = linalg.solve(A, b)\nprint(f\"Solution: x = {x}\")\n\n# Verify\nprint(f\"Check A @ x = {A @ x}\")\n\nEigendecomposition\nfrom scipy import linalg\nimport numpy as np\n\nA = np.array([[1, 2], [2, 1]])\neigenvalues, eigenvectors = linalg.eig(A)\n\nprint(f\"Eigenvalues: {eigenvalues}\")\nprint(f\"Eigenvectors:\\n{eigenvectors}\")\n\nCommon Traps\nWrong bounds format in minimize → bounds must be list of (min, max) tuples, one per variable\nForgetting to check result.success → optimization can fail silently, always check\nUsing interp1d outside data range → raises error by default, use fill_value='extrapolate' or bounds_error=False\nfiltfilt vs lfilter → use filtfilt for zero-phase filtering, lfilter introduces phase shift\ncurve_fit with bad initial guess → can converge to wrong solution, always provide reasonable p0\nInteger division in Python 3 → use x / 2 not x // 2 for float division in formulas\nSecurity & Privacy\n\nData that stays local:\n\nAll computations run in user's Python environment\nNo data leaves the machine\n\nThis skill does NOT:\n\nSend data externally\nCreate persistent files\nAccess network resources\nRelated Skills\n\nInstall with clawhub install <slug> if user confirms:\n\nmath — mathematical concepts\ndata-analysis — data exploration\ndata — data handling patterns\nFeedback\nIf useful: clawhub star scipy\nStay updated: clawhub sync"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/ivangdavila/scipy",
    "publisherUrl": "https://clawhub.ai/ivangdavila/scipy",
    "owner": "ivangdavila",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/scipy",
    "downloadUrl": "https://openagent3.xyz/downloads/scipy",
    "agentUrl": "https://openagent3.xyz/skills/scipy/agent",
    "manifestUrl": "https://openagent3.xyz/skills/scipy/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/scipy/agent.md"
  }
}