cli-tool/components/skills/scientific/sympy/SKILL.md
Use this skill when working with symbolic mathematics in Python. This skill should be used for symbolic computation tasks including solving equations algebraically, performing calculus operations (derivatives, integrals, limits), manipulating algebraic expressions, working with matrices symbolically, physics calculations, number theory problems, geometry computations, and generating executable code from mathematical expressions. Apply this skill when the user needs exact symbolic results rather than numerical approximations, or when working with mathematical formulas that contain variables and parameters.
npx skillsauth add davila7/claude-code-templates sympyInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
SymPy is a Python library for symbolic mathematics that enables exact computation using mathematical symbols rather than numerical approximations. This skill provides comprehensive guidance for performing symbolic algebra, calculus, linear algebra, equation solving, physics calculations, and code generation using SymPy.
Use this skill when:
sqrt(2) not 1.414...)Creating symbols and expressions:
from sympy import symbols, Symbol
x, y, z = symbols('x y z')
expr = x**2 + 2*x + 1
# With assumptions
x = symbols('x', real=True, positive=True)
n = symbols('n', integer=True)
Simplification and manipulation:
from sympy import simplify, expand, factor, cancel
simplify(sin(x)**2 + cos(x)**2) # Returns 1
expand((x + 1)**3) # x**3 + 3*x**2 + 3*x + 1
factor(x**2 - 1) # (x - 1)*(x + 1)
For detailed basics: See references/core-capabilities.md
Derivatives:
from sympy import diff
diff(x**2, x) # 2*x
diff(x**4, x, 3) # 24*x (third derivative)
diff(x**2*y**3, x, y) # 6*x*y**2 (partial derivatives)
Integrals:
from sympy import integrate, oo
integrate(x**2, x) # x**3/3 (indefinite)
integrate(x**2, (x, 0, 1)) # 1/3 (definite)
integrate(exp(-x), (x, 0, oo)) # 1 (improper)
Limits and Series:
from sympy import limit, series
limit(sin(x)/x, x, 0) # 1
series(exp(x), x, 0, 6) # 1 + x + x**2/2 + x**3/6 + x**4/24 + x**5/120 + O(x**6)
For detailed calculus operations: See references/core-capabilities.md
Algebraic equations:
from sympy import solveset, solve, Eq
solveset(x**2 - 4, x) # {-2, 2}
solve(Eq(x**2, 4), x) # [-2, 2]
Systems of equations:
from sympy import linsolve, nonlinsolve
linsolve([x + y - 2, x - y], x, y) # {(1, 1)} (linear)
nonlinsolve([x**2 + y - 2, x + y**2 - 3], x, y) # (nonlinear)
Differential equations:
from sympy import Function, dsolve, Derivative
f = symbols('f', cls=Function)
dsolve(Derivative(f(x), x) - f(x), f(x)) # Eq(f(x), C1*exp(x))
For detailed solving methods: See references/core-capabilities.md
Matrix creation and operations:
from sympy import Matrix, eye, zeros
M = Matrix([[1, 2], [3, 4]])
M_inv = M**-1 # Inverse
M.det() # Determinant
M.T # Transpose
Eigenvalues and eigenvectors:
eigenvals = M.eigenvals() # {eigenvalue: multiplicity}
eigenvects = M.eigenvects() # [(eigenval, mult, [eigenvectors])]
P, D = M.diagonalize() # M = P*D*P^-1
Solving linear systems:
A = Matrix([[1, 2], [3, 4]])
b = Matrix([5, 6])
x = A.solve(b) # Solve Ax = b
For comprehensive linear algebra: See references/matrices-linear-algebra.md
Classical mechanics:
from sympy.physics.mechanics import dynamicsymbols, LagrangesMethod
from sympy import symbols
# Define system
q = dynamicsymbols('q')
m, g, l = symbols('m g l')
# Lagrangian (T - V)
L = m*(l*q.diff())**2/2 - m*g*l*(1 - cos(q))
# Apply Lagrange's method
LM = LagrangesMethod(L, [q])
Vector analysis:
from sympy.physics.vector import ReferenceFrame, dot, cross
N = ReferenceFrame('N')
v1 = 3*N.x + 4*N.y
v2 = 1*N.x + 2*N.z
dot(v1, v2) # Dot product
cross(v1, v2) # Cross product
Quantum mechanics:
from sympy.physics.quantum import Ket, Bra, Commutator
psi = Ket('psi')
A = Operator('A')
comm = Commutator(A, B).doit()
For detailed physics capabilities: See references/physics-mechanics.md
The skill includes comprehensive support for:
For detailed advanced topics: See references/advanced-topics.md
Convert to executable functions:
from sympy import lambdify
import numpy as np
expr = x**2 + 2*x + 1
f = lambdify(x, expr, 'numpy') # Create NumPy function
x_vals = np.linspace(0, 10, 100)
y_vals = f(x_vals) # Fast numerical evaluation
Generate C/Fortran code:
from sympy.utilities.codegen import codegen
[(c_name, c_code), (h_name, h_header)] = codegen(
('my_func', expr), 'C'
)
LaTeX output:
from sympy import latex
latex_str = latex(expr) # Convert to LaTeX for documents
For comprehensive code generation: See references/code-generation-printing.md
from sympy import symbols
x, y, z = symbols('x y z')
# Now x, y, z can be used in expressions
x = symbols('x', positive=True, real=True)
sqrt(x**2) # Returns x (not Abs(x)) due to positive assumption
Common assumptions: real, positive, negative, integer, rational, complex, even, odd
from sympy import Rational, S
# Correct (exact):
expr = Rational(1, 2) * x
expr = S(1)/2 * x
# Incorrect (floating-point):
expr = 0.5 * x # Creates approximate value
from sympy import pi, sqrt
result = sqrt(8) + pi
result.evalf() # 5.96371554103586
result.evalf(50) # 50 digits of precision
# Slow for many evaluations:
for x_val in range(1000):
result = expr.subs(x, x_val).evalf()
# Fast:
f = lambdify(x, expr, 'numpy')
results = f(np.arange(1000))
solveset: Algebraic equations (primary)linsolve: Linear systemsnonlinsolve: Nonlinear systemsdsolve: Differential equationssolve: General purpose (legacy, but flexible)This skill uses modular reference files for different capabilities:
core-capabilities.md: Symbols, algebra, calculus, simplification, equation solving
matrices-linear-algebra.md: Matrix operations, eigenvalues, linear systems
physics-mechanics.md: Classical mechanics, quantum mechanics, vectors, units
advanced-topics.md: Geometry, number theory, combinatorics, logic, statistics
code-generation-printing.md: Lambdify, codegen, LaTeX output, printing
from sympy import symbols, solve, simplify
x = symbols('x')
# Solve equation
equation = x**2 - 5*x + 6
solutions = solve(equation, x) # [2, 3]
# Verify solutions
for sol in solutions:
result = simplify(equation.subs(x, sol))
assert result == 0
# 1. Define symbolic problem
x, y = symbols('x y')
expr = sin(x) + cos(y)
# 2. Manipulate symbolically
simplified = simplify(expr)
derivative = diff(simplified, x)
# 3. Convert to numerical function
f = lambdify((x, y), derivative, 'numpy')
# 4. Evaluate numerically
results = f(x_data, y_data)
# Compute result symbolically
integral_expr = Integral(x**2, (x, 0, 1))
result = integral_expr.doit()
# Generate documentation
print(f"LaTeX: {latex(integral_expr)} = {latex(result)}")
print(f"Pretty: {pretty(integral_expr)} = {pretty(result)}")
print(f"Numerical: {result.evalf()}")
import numpy as np
from sympy import symbols, lambdify
x = symbols('x')
expr = x**2 + 2*x + 1
f = lambdify(x, expr, 'numpy')
x_array = np.linspace(-5, 5, 100)
y_array = f(x_array)
import matplotlib.pyplot as plt
import numpy as np
from sympy import symbols, lambdify, sin
x = symbols('x')
expr = sin(x) / x
f = lambdify(x, expr, 'numpy')
x_vals = np.linspace(-10, 10, 1000)
y_vals = f(x_vals)
plt.plot(x_vals, y_vals)
plt.show()
from scipy.optimize import fsolve
from sympy import symbols, lambdify
# Define equation symbolically
x = symbols('x')
equation = x**3 - 2*x - 5
# Convert to numerical function
f = lambdify(x, equation, 'numpy')
# Solve numerically with initial guess
solution = fsolve(f, 2)
# Symbols
from sympy import symbols, Symbol
x, y = symbols('x y')
# Basic operations
from sympy import simplify, expand, factor, collect, cancel
from sympy import sqrt, exp, log, sin, cos, tan, pi, E, I, oo
# Calculus
from sympy import diff, integrate, limit, series, Derivative, Integral
# Solving
from sympy import solve, solveset, linsolve, nonlinsolve, dsolve
# Matrices
from sympy import Matrix, eye, zeros, ones, diag
# Logic and sets
from sympy import And, Or, Not, Implies, FiniteSet, Interval, Union
# Output
from sympy import latex, pprint, lambdify, init_printing
# Utilities
from sympy import evalf, N, nsimplify
from sympy import symbols, solve, sqrt
x = symbols('x')
solution = solve(x**2 - 5*x + 6, x)
# [2, 3]
from sympy import symbols, diff, sin
x = symbols('x')
f = sin(x**2)
df_dx = diff(f, x)
# 2*x*cos(x**2)
from sympy import symbols, integrate, exp
x = symbols('x')
integral = integrate(x * exp(-x**2), (x, 0, oo))
# 1/2
from sympy import Matrix
M = Matrix([[1, 2], [2, 1]])
eigenvals = M.eigenvals()
# {3: 1, -1: 1}
from sympy import symbols, lambdify
import numpy as np
x = symbols('x')
expr = x**2 + 2*x + 1
f = lambdify(x, expr, 'numpy')
f(np.array([1, 2, 3]))
# array([ 4, 9, 16])
"NameError: name 'x' is not defined"
symbols() before useUnexpected numerical results
0.5 instead of Rational(1, 2)Rational() or S() for exact arithmeticSlow performance in loops
subs() and evalf() repeatedlylambdify() to create a fast numerical function"Can't solve this equation"
solve, solveset, nsolve (numerical)Simplification not working as expected
simplify, factor, expand, trigsimppositive=True)simplify(expr, force=True) for aggressive simplificationtools
No-code automation democratizes workflow building. Zapier and Make (formerly Integromat) let non-developers automate business processes without writing code. But no-code doesn't mean no-complexity - these platforms have their own patterns, pitfalls, and breaking points. This skill covers when to use which platform, how to build reliable automations, and when to graduate to code-based solutions. Key insight: Zapier optimizes for simplicity and integrations (7000+ apps), Make optimizes for power
tools
Use only when the user explicitly asks to stage, commit, push, and open a GitHub pull request in one flow using the GitHub CLI (`gh`).
tools
Workflow automation is the infrastructure that makes AI agents reliable. Without durable execution, a network hiccup during a 10-step payment flow means lost money and angry customers. With it, workflows resume exactly where they left off. This skill covers the platforms (n8n, Temporal, Inngest) and patterns (sequential, parallel, orchestrator-worker) that turn brittle scripts into production-grade automation. Key insight: The platforms make different tradeoffs. n8n optimizes for accessibility
development
Trigger.dev expert for background jobs, AI workflows, and reliable async execution with excellent developer experience and TypeScript-first design. Use when: trigger.dev, trigger dev, background task, ai background job, long running task.