Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
366 commits
Select commit Hold shift + click to select a range
9999351
translated file 1_1_2_2
Bumblebee00 Jul 9, 2025
aebf2e6
fixed bug in rule 9_1_12_1
Bumblebee00 Jul 9, 2025
d82394e
added 55 rules from file 1_1_2_3
Bumblebee00 Jul 10, 2025
4faa2f8
improved rule 9_1_12 with sesgment matcher
Bumblebee00 Jul 10, 2025
cd43c01
commented IntBinomialQ rules
Bumblebee00 Jul 10, 2025
6cc141f
added 67 rules from file 1_1_2_4
Bumblebee00 Jul 10, 2025
d66c3be
fixed rule 9_1_12
Bumblebee00 Jul 10, 2025
aa55dca
added tests for rules 1_1_2_4
Bumblebee00 Jul 10, 2025
20279a8
re added rules 1_1_3_1 (rules for atan)
Bumblebee00 Jul 10, 2025
cfd4282
fixed tests
Bumblebee00 Jul 10, 2025
6e027a6
tmp
Bumblebee00 Jul 11, 2025
4b1496a
removed nested conditions
Bumblebee00 Jul 11, 2025
df175a7
added support for variable names ending with a number
Bumblebee00 Jul 11, 2025
914835c
added 100 rules from file 1_1_3_2
Bumblebee00 Jul 11, 2025
2d8b6e8
added exponential rules from file 2_1
Bumblebee00 Jul 11, 2025
34660b8
added loading info printout to terminal with cool colors to the reloa…
Bumblebee00 Jul 12, 2025
590f735
added file rules file 2.2
Bumblebee00 Jul 12, 2025
7305d97
added almost all rules from file 2.3
Bumblebee00 Jul 12, 2025
4e76fe9
fixed const bug
Bumblebee00 Jul 12, 2025
42b9d0d
added function to reload rules from only one file (is time saving)
Bumblebee00 Jul 16, 2025
9b97403
removed use_gamma function
Bumblebee00 Jul 16, 2025
17810ee
updated readme with contributing section
Bumblebee00 Jul 17, 2025
f556f92
added two integrand simplification rules
Bumblebee00 Jul 17, 2025
c3344a9
added first logarithm rule file
Bumblebee00 Jul 17, 2025
37f4cd0
added rule file 3_1_2
Bumblebee00 Jul 18, 2025
298a290
fixed problem with E^ and Exp in file 2.3
Bumblebee00 Jul 18, 2025
dec854d
refactored rules translator and added autocomment to rules with unint…
Bumblebee00 Jul 18, 2025
5bc1e6f
added PolyLog package as dependency for `li` function
Bumblebee00 Jul 18, 2025
9a81502
added some of the rules from file 3.1.3 (IntHide and BinomialQ missing)
Bumblebee00 Jul 18, 2025
98ec6c8
addded tests for rules 3_1_3
Bumblebee00 Jul 19, 2025
904992c
added remaining rules of file 3_1_3
Bumblebee00 Jul 19, 2025
c46e9b9
improved rules translator to not match functions ending in the functi…
Bumblebee00 Jul 19, 2025
2a50f77
added some rules to 2_3 with updated translator script
Bumblebee00 Jul 19, 2025
37da574
fixed smart_replace function to deal with non ascii charachters
Bumblebee00 Jul 20, 2025
1b9b521
improved coefficient function
Bumblebee00 Jul 20, 2025
81ced17
improved smart replace to check number of arguments of function
Bumblebee00 Jul 20, 2025
3ab5525
adde rules 3_1_4
Bumblebee00 Jul 20, 2025
0e6cd33
fixed bug in translation of SimplifyIntegrand
Bumblebee00 Jul 20, 2025
be9de1c
fixed bug in smaartreplace function
Bumblebee00 Jul 20, 2025
46782c1
fixed bug in rulse 9_1_26
Bumblebee00 Jul 20, 2025
4361cb6
added rules 3_1_5
Bumblebee00 Jul 20, 2025
fc7095d
added rules 3_2_1
Bumblebee00 Jul 21, 2025
bcf2741
added rules 3_2_2
Bumblebee00 Jul 21, 2025
efd5847
added algebraic_function function
Bumblebee00 Jul 21, 2025
6f7c299
added rules 3_2_3
Bumblebee00 Jul 21, 2025
5d3225f
added rules 3_3
Bumblebee00 Jul 21, 2025
b106843
added rules 3_4
Bumblebee00 Jul 21, 2025
06c2530
improved rules translator to support nested conditions
Bumblebee00 Jul 21, 2025
be2a813
Log was removed from lis of integral substitutions... who did it?
Bumblebee00 Jul 22, 2025
150b5d4
added rules 3_5
Bumblebee00 Jul 22, 2025
be011b7
improved smart replace
Bumblebee00 Jul 23, 2025
1f774ae
improved translation of loggama function
Bumblebee00 Aug 2, 2025
6f510b0
removed comments from middle of rules that mess with the transaltion …
Bumblebee00 Aug 2, 2025
7cf5fcc
introduced differentiation in rules
Bumblebee00 Aug 2, 2025
388df4e
moved EqQ and NeQ to smart replace
Bumblebee00 Aug 2, 2025
0909714
improved translation of the Mathematica "With" syntax to catch cases…
Bumblebee00 Aug 2, 2025
1eaf984
improved translation of the Mathematica "With" syntax to handle any n…
Bumblebee00 Aug 2, 2025
6209137
improved function to check if expr is a algebraic function: faster an…
Bumblebee00 Aug 2, 2025
f0d1f4c
added rational_function
Bumblebee00 Aug 2, 2025
46b261d
improved smart replace and consequently addded 4 rules
Bumblebee00 Aug 2, 2025
11812fb
improved repeated prewalk to support nested integrals
Bumblebee00 Aug 2, 2025
03aafdd
addde quadratic functino and two rules
Bumblebee00 Aug 2, 2025
17bc246
splitted string helper functions in another file bc too big
Bumblebee00 Aug 2, 2025
238f20f
added first trigonometric rules from filr 4_1_1_1
Bumblebee00 Aug 2, 2025
3ae0394
improved custom division function to return int if the denominator of…
Bumblebee00 Aug 2, 2025
1ae7eb3
added some sine rules
Bumblebee00 Aug 3, 2025
e2c51d3
small refactor
Bumblebee00 Aug 3, 2025
5857c27
reverted from Combinatorics 1.0.3 to 1.0.2 bc their package is too slow
Bumblebee00 Aug 3, 2025
99c414b
made the rules array const for important speedups in package load time
Bumblebee00 Aug 3, 2025
f8693fa
i am stupid, reverting the refactor of before
Bumblebee00 Aug 3, 2025
68f79e4
fixed small print bug
Bumblebee00 Aug 3, 2025
4b40e2e
small fix
Bumblebee00 Aug 4, 2025
352530a
improved `linear` function to return false on scalars not containing x
Bumblebee00 Aug 4, 2025
174f2d5
fixed strange bug in the integration of 1 / ((c + (a + b*x)*d)^(1//2))
Bumblebee00 Aug 5, 2025
10c636d
refactored a bit tests
Bumblebee00 Aug 5, 2025
f9e68a1
added some tests
Bumblebee00 Aug 5, 2025
35b4c58
small fix
Bumblebee00 Aug 5, 2025
6ded12e
improved ext_expand function
Bumblebee00 Aug 7, 2025
fe0fb6d
introduced simp function with two arguments
Bumblebee00 Aug 7, 2025
63cb323
added some rules from trigonometric product section
Bumblebee00 Aug 7, 2025
ccdb5c4
improved gt functions
Bumblebee00 Aug 8, 2025
57d689c
improved pos e neg functions
Bumblebee00 Aug 8, 2025
844eff5
improved igt and similar
Bumblebee00 Aug 8, 2025
eda068c
fixed some error in tests
Bumblebee00 Aug 8, 2025
e615d69
translated two test files
Bumblebee00 Aug 8, 2025
2ed2323
added elliptic integral of the third kind
Bumblebee00 Aug 8, 2025
9e6b036
changed name so it autocompletes on terminal
Bumblebee00 Aug 8, 2025
3f67972
added trinomial product rules
Bumblebee00 Aug 8, 2025
3d5e11a
added tests
Bumblebee00 Aug 8, 2025
b807d8e
refactor
Bumblebee00 Aug 9, 2025
8b2eba5
removed ci of julia 1.6
Bumblebee00 Aug 9, 2025
90ebac9
refactor
Bumblebee00 Aug 10, 2025
c4d00ab
improved old rules
Bumblebee00 Aug 10, 2025
b991729
added lots of rules in section 1.2
Bumblebee00 Aug 10, 2025
fa608a1
improved rt and nice_sqrt functions
Bumblebee00 Aug 10, 2025
98393b1
added rules 1.2.2.2
Bumblebee00 Aug 10, 2025
b25f595
removed ugly errors
Bumblebee00 Aug 10, 2025
5574603
moved all ruels array to SymbolicIntegration.jl for clarity
Bumblebee00 Aug 10, 2025
a949c97
added trig rules
Bumblebee00 Aug 10, 2025
011e1f0
refactor
Bumblebee00 Aug 10, 2025
0e77376
modified rule to catch more cases
Bumblebee00 Aug 10, 2025
097f520
modified pretty_indentation to support charachters onger than one byte
Bumblebee00 Aug 10, 2025
efbb38a
added 4.1.10 rules
Bumblebee00 Aug 10, 2025
6a4f088
added manually one rule
Bumblebee00 Aug 10, 2025
838b710
removed one rule
Bumblebee00 Aug 10, 2025
9f380c7
typos
Bumblebee00 Aug 10, 2025
bda33a3
added some trig function rules
Bumblebee00 Aug 11, 2025
3578e70
fixed bug in reload_rules()
Bumblebee00 Aug 11, 2025
9e64ccd
added some more trigonometric rules
Bumblebee00 Aug 11, 2025
39f9af4
added a retry with simplify(;expand=true) if integration doesnt work
Bumblebee00 Aug 11, 2025
088f64e
addded rules 1.1.3.7
Bumblebee00 Aug 13, 2025
c7f83d6
improved ext_den and num functions
Bumblebee00 Aug 13, 2025
d327f6e
added rules 1.1.3.3
Bumblebee00 Aug 13, 2025
e7981ac
improved rt and ⟰ functions
Bumblebee00 Aug 13, 2025
80cf26b
found duplicate rules...
Bumblebee00 Aug 13, 2025
9288d1a
fix error
Bumblebee00 Aug 13, 2025
bff7fe4
added all the rules 1.1.3.x
Bumblebee00 Aug 13, 2025
b310876
translated testfiles of section 1 algebraic functions
Bumblebee00 Aug 14, 2025
84fd1d6
translated independent testifiles
Bumblebee00 Aug 14, 2025
4d11b6a
improved translation of sum function
Bumblebee00 Aug 15, 2025
b3a6fc6
added documentation on how to translate rules
Bumblebee00 Aug 15, 2025
00d4c90
added all 4.1 rules
Bumblebee00 Aug 15, 2025
6f7089e
small improvements
Bumblebee00 Aug 15, 2025
84808c5
imrpved a lot printing of intermediate steps
Bumblebee00 Aug 15, 2025
e61f4cd
improved by a lot verbose printing of rules
Bumblebee00 Aug 16, 2025
bc74bfe
small fix
Bumblebee00 Aug 16, 2025
836c9b1
impeoved verbose output of the subst_and_int function
Bumblebee00 Aug 16, 2025
1bb5ac5
refactor
Bumblebee00 Aug 16, 2025
70d3769
now using SymbolicUtils.node_count
Bumblebee00 Aug 16, 2025
331a8af
some work on ext_expand
Bumblebee00 Aug 16, 2025
d69247a
workaround of the neim problem
Bumblebee00 Aug 16, 2025
ad54f28
removed remaining Symbolics.coeff
Bumblebee00 Aug 17, 2025
0123d49
some more work on ext_expand
Bumblebee00 Aug 17, 2025
2128b69
improved neim workaround
Bumblebee00 Aug 17, 2025
874db16
small fixes
Bumblebee00 Aug 17, 2025
00b3868
added some inverse trig rules
Bumblebee00 Aug 17, 2025
ca57399
added some not transalted before misc exp rules
Bumblebee00 Aug 17, 2025
0dc116d
improved rules reloading
Bumblebee00 Aug 17, 2025
9c7a44b
more work on rules reloading, changed index of int simplifiaciton rules
Bumblebee00 Aug 17, 2025
9335822
fix small bug in 5.1 rules
Bumblebee00 Aug 17, 2025
cb44d34
fixed bug in intpart function
Bumblebee00 Aug 17, 2025
a0b48a4
with syntax replaces variables in other variables definition
Bumblebee00 Aug 17, 2025
b488729
added some rules 1.1.1
Bumblebee00 Aug 17, 2025
c587583
improved print of infinite cycle
Bumblebee00 Aug 17, 2025
b04db62
improved rule with predicates
Bumblebee00 Aug 17, 2025
4044f0b
work on ext_expand
Bumblebee00 Aug 17, 2025
8578f67
small fix
Bumblebee00 Aug 17, 2025
178613c
removed faulty rule
Bumblebee00 Aug 17, 2025
7816085
improved testing process
Bumblebee00 Aug 17, 2025
b5c6d36
added workaround of neim problem also in ext_expand
Bumblebee00 Aug 18, 2025
71384f2
added some rules
Bumblebee00 Aug 18, 2025
840ba36
added one integrand simplificatino rule
Bumblebee00 Aug 18, 2025
a786852
small fix
Bumblebee00 Aug 18, 2025
8f42af2
removed one faulty rule
Bumblebee00 Aug 18, 2025
431a2e7
new testsets
Bumblebee00 Aug 18, 2025
9f01570
now we can save tests output
Bumblebee00 Aug 18, 2025
3b21d1c
updated testset to new syntax
Bumblebee00 Aug 19, 2025
1b2e89a
maybe this fixes ci?
Bumblebee00 Aug 20, 2025
3b88436
maybe this fixes ci of julia pre?
Bumblebee00 Aug 20, 2025
31b3425
docstring
Bumblebee00 Aug 22, 2025
93fb035
updated independent test suites with new syntax
Bumblebee00 Aug 22, 2025
a489909
updated section 1 tests to new syntax
Bumblebee00 Aug 22, 2025
d9c9519
added rules section 7.1 inverse hyperbolic sine
Bumblebee00 Aug 22, 2025
e8f7875
added draft of gsoc final report
Bumblebee00 Aug 22, 2025
1f59729
added inverse hyperbolic cosine rules
Bumblebee00 Aug 22, 2025
ffd44d7
added 7.3 inverse hyoebolic tangent
Bumblebee00 Aug 22, 2025
7a885b1
added some missing rules
Bumblebee00 Aug 22, 2025
eaf880f
added simplify at the end
Bumblebee00 Aug 22, 2025
19cc97f
added 1.3.4 rules
Bumblebee00 Aug 22, 2025
88fa6fc
added other 1.3.4 rules
Bumblebee00 Aug 22, 2025
c4c8754
added 1.1.4.1 rules with manual translation for some of them due to o…
Bumblebee00 Aug 22, 2025
eab91a3
added rules 1.1.4 even tough they mostly dont work due to oooomm problem
Bumblebee00 Aug 22, 2025
a44758e
work on ext_expand
Bumblebee00 Aug 22, 2025
ace1c7d
improved rule 0_1_12
Bumblebee00 Aug 22, 2025
6451d44
various refactors
Bumblebee00 Aug 22, 2025
8cfa888
fixed error in rules translation
Bumblebee00 Aug 22, 2025
b27401a
fixed failing test
Bumblebee00 Aug 23, 2025
b9e68b0
improved tests
Bumblebee00 Aug 23, 2025
5c84a1a
fixed small bug
Bumblebee00 Aug 23, 2025
3144438
added ⟰ to rules that needed it
Bumblebee00 Aug 23, 2025
66d126b
added warning to use ⟰ when encountring fractional powers
Bumblebee00 Aug 23, 2025
298c1ba
rewritten rules with let block in smarter way
Bumblebee00 Aug 23, 2025
46a1b03
added new way to translate the with synax using the let block
Bumblebee00 Aug 24, 2025
a622acb
updated rules with ⟰ operator (again)
Bumblebee00 Aug 24, 2025
dbba3ed
updated rule 0_1_12 that was failing inside the let block I dont know…
Bumblebee00 Aug 24, 2025
88641ae
added docstring for ncn function (useful)
Bumblebee00 Aug 24, 2025
d97c609
removed tests of other packages
Bumblebee00 Aug 24, 2025
6e37653
removed Mathematica testests
Bumblebee00 Aug 24, 2025
f69b12a
reupdated rule 0.1.12
Bumblebee00 Aug 24, 2025
0aa8f93
update gsoc final report
Bumblebee00 Aug 24, 2025
84c8140
updatted gsoc final report
Bumblebee00 Aug 24, 2025
d520878
updatted gsoc final report
Bumblebee00 Aug 24, 2025
a53ffc2
added rules count badge
Bumblebee00 Aug 25, 2025
4841e13
fixed bug in rule 1.1.3.7.46
Bumblebee00 Aug 25, 2025
dd79968
added spell check action
Bumblebee00 Aug 25, 2025
1fc3fe7
small improvement
Bumblebee00 Aug 25, 2025
c537029
updated rules 3.3
Bumblebee00 Aug 25, 2025
ab54a3f
updated rules count workflow
Bumblebee00 Aug 25, 2025
329b30e
improved erroring rule
Bumblebee00 Aug 25, 2025
8e36783
Bump actions/checkout from 4 to 5
dependabot[bot] Aug 12, 2025
0fde30a
Update rules count badge [skip ci]
actions-user Aug 25, 2025
ccbec4c
fixed a lot of typos
Bumblebee00 Aug 25, 2025
20a543e
added rules 4.7.7
Bumblebee00 Aug 25, 2025
2b3a361
moved rules cont to CI
Bumblebee00 Aug 25, 2025
aee2e38
updated rules label message
Bumblebee00 Aug 25, 2025
01bf063
improved poly coefficients function
Bumblebee00 Aug 25, 2025
4b3d573
updated rules bdge
Bumblebee00 Aug 25, 2025
2d5ce82
updated again rules badge
Bumblebee00 Aug 25, 2025
9ff7048
added cosecant rules
Bumblebee00 Aug 25, 2025
469dc5a
Update rules count badge [skip ci]
github-actions[bot] Aug 25, 2025
f28b728
improved rule 0_1_12 to work also with symbolic quantities
Bumblebee00 Aug 25, 2025
a5c9488
added one logarithm rule
Bumblebee00 Aug 27, 2025
99811ff
rewriten some rules with new let syntax
Bumblebee00 Aug 27, 2025
4d14177
small refactor
Bumblebee00 Aug 27, 2025
afb0336
updated gsoc report
Bumblebee00 Aug 27, 2025
5e64be5
fixed monomial function
Bumblebee00 Aug 27, 2025
0fd109d
deleted .m files
Bumblebee00 Aug 27, 2025
033d521
moved src files in appropiate folder
Bumblebee00 Aug 27, 2025
3fd5351
moved testfiles in appropriate folder
Bumblebee00 Aug 27, 2025
afbfe7d
updated some files
Bumblebee00 Aug 27, 2025
e62d94a
fixed project toml
Bumblebee00 Aug 27, 2025
049c278
moved no integration var functino ro methods.jl
Bumblebee00 Aug 27, 2025
43e380c
removed Polynomials.jl dependency
Bumblebee00 Aug 27, 2025
339b361
de AI-fied readme
Bumblebee00 Aug 27, 2025
5a01930
updated integatie function to try both metods
Bumblebee00 Aug 27, 2025
c1baf63
removed unnecessary export
Bumblebee00 Aug 27, 2025
a71a734
added all the rules
Bumblebee00 Aug 27, 2025
e0f405f
included rule based test suite
Bumblebee00 Aug 28, 2025
54cf820
fixed bug when integrating log
Bumblebee00 Aug 28, 2025
57a9f3d
same as https://github.com/JuliaSymbolics/SymbolicIntegration.jl/pull/15
Bumblebee00 Sep 4, 2025
85dda75
renamed binomial funciton
Bumblebee00 Sep 8, 2025
752a2cb
improved print output
Bumblebee00 Sep 8, 2025
c168049
added documentation
Bumblebee00 Sep 8, 2025
1823504
finxed typos
Bumblebee00 Sep 8, 2025
a6f9c85
fixed int_and_subst function
Bumblebee00 Sep 8, 2025
eaa136a
fix other typos
Bumblebee00 Sep 8, 2025
cf90227
fixed CI
Bumblebee00 Sep 8, 2025
81a6b74
Update src/methods.jl
ChrisRackauckas Sep 9, 2025
7db7cff
Update LICENSE
ChrisRackauckas Sep 9, 2025
809b007
Update .github/workflows/ci.yml
ChrisRackauckas Sep 9, 2025
6ac197e
Update .github/workflows/ci.yml
ChrisRackauckas Sep 9, 2025
5a5aa7e
Update .github/workflows/ci.yml
ChrisRackauckas Sep 9, 2025
3b9355f
Update src/methods.jl
ChrisRackauckas Sep 9, 2025
35ce25f
Update src/methods.jl
ChrisRackauckas Sep 9, 2025
81826c2
implemented review suggestions
Bumblebee00 Sep 9, 2025
f7ab23d
moved information from redmen to documentation
Bumblebee00 Sep 9, 2025
274e0aa
fixed order of includes
Bumblebee00 Sep 9, 2025
a5419e9
fixed again order of includes
Bumblebee00 Sep 9, 2025
2c0c425
improved documentation
Bumblebee00 Sep 9, 2025
8344d68
fix typo
Bumblebee00 Sep 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 6 additions & 0 deletions .github/badges/rules-count.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"schemaVersion": 1,
"label": "Total rules",
"message": "3399",
"color": "blue"
}
7 changes: 7 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
49 changes: 48 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ jobs:
version:
- '1.10'
- '1'
- 'pre'
os:
- ubuntu-latest
- macos-latest
Expand All @@ -37,7 +38,53 @@ jobs:
arch: ${{ matrix.arch }}
- uses: julia-actions/cache@v2
- uses: julia-actions/julia-buildpkg@v1
- uses: julia-actions/julia-runtest@v1
- name: Run tests julia 1.11 ubuntu-latest and count rules
if: matrix.version == '1' && matrix.os == 'ubuntu-latest'
run: |
julia --project=. -e "
using SymbolicIntegration
using Pkg

rules_count = length(SymbolicIntegration.RULES)
println(\"Total rules: \$rules_count\")

# Create directory if it doesn't exist
mkpath(\".github/badges\")

# Write the JSON file manually
open(\".github/badges/rules-count.json\", \"w\") do f
println(f, \"{\")
println(f, \" \\\"schemaVersion\\\": 1,\")
println(f, \" \\\"label\\\": \\\"Total rules\\\",\")
println(f, \" \\\"message\\\": \\\"\$rules_count\\\",\")
println(f, \" \\\"color\\\": \\\"blue\\\"\")
println(f, \"}\")
end

println(\"Badge data written to .github/badges/rules-count.json\")

Pkg.test()
"
id: count_rules

- name: Commit badge data
if: matrix.version == '1' && matrix.os == 'ubuntu-latest' && github.ref == 'refs/heads/main'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git add .github/badges/rules-count.json
if git diff --staged --quiet; then
echo "No changes to commit"
else
git commit -m "Update rules count badge [skip ci]"
git push
fi

- name: Run tests (other configurations)
if: ${{ !(matrix.version == '1' && matrix.os == 'ubuntu-latest') }}
uses: julia-actions/julia-runtest@v1
- uses: julia-actions/julia-processcoverage@v1
- uses: codecov/codecov-action@v5
with:
Expand Down
13 changes: 13 additions & 0 deletions .github/workflows/spellcheck.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: Spell Check

on: [push, pull_request]

jobs:
typos-check:
name: Spell Check with Typos
runs-on: ubuntu-latest
steps:
- name: Checkout Actions Repository
uses: actions/checkout@v4
- name: Check spelling
uses: crate-ci/typos@v1.16.23
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
SymbolicIntegration.jl is licensed under the MIT License:

Copyright (c) 2022 Harald Hofstätter
Copyright (c) 2022 Harald Hofstätter, Mattia Micheletta Merlin, Chris Rackauckas, and other contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
22 changes: 17 additions & 5 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,28 +1,40 @@
name = "SymbolicIntegration"
uuid = "315ce56f-eed0-411d-ab8a-2fbdf9327b51"
authors = ["HaraldHofstaetter <hofi@harald-hofstaetter.at>", "Chris Rackauckas <accounts@chrisrackauckas.com>", "JuliaSymbolics contributors"]
version = "2.0.0"
keywords = ["symbolic", "integration", "mathematics", "computer-algebra"]
license = "MIT"
authors = ["HaraldHofstaetter <hofi@harald-hofstaetter.at>", "Mattia Micheletta Merlin <micheletta.mattia@gmail.com>", "Chris Rackauckas <accounts@chrisrackauckas.com>", "JuliaSymbolics contributors"]
description = "Symbolic integration algorithms for Julia"
repository = "https://github.com/JuliaSymbolics/SymbolicIntegration.jl"
license = "MIT"
keywords = ["symbolic", "integration", "mathematics", "computer-algebra"]
version = "2.0.0"

[deps]
AbstractAlgebra = "c3fe647b-3220-5bb0-a1ea-a7954cac585d"
Combinatorics = "861a8166-3701-5b0c-9a16-15d98fcdc6aa"
Elliptic = "b305315f-e792-5b7a-8f41-49f472929428"
FresnelIntegrals = "88497964-e39a-11e9-0fb5-b1bf0ffe80fe"
HypergeometricFunctions = "34004b35-14d8-5ef3-9330-4cdb6864b03a"
Logging = "56ddb016-857b-54e1-b83d-db4d58db5568"
Nemo = "2edaba10-b0f1-5616-af89-8c11ac63239a"
PolyLog = "85e3b03c-9856-11eb-0374-4dc1f8670e7f"
SymbolicUtils = "d1185830-fcd6-423d-90d6-eec64667417b"
Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7"

[compat]
AbstractAlgebra = "0.46"
Combinatorics = "1.0.2"
Elliptic = "1.0.1"
FresnelIntegrals = "0.2.0"
HypergeometricFunctions = "0.3.28"
Nemo = "0.51"
PolyLog = "2.6.0"
SymbolicUtils = "3"
Symbolics = "6"
julia = "1.10"

[extras]
Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

[targets]
test = ["Test"]
test = ["Test", "Pkg", "Dates"]
136 changes: 61 additions & 75 deletions README.md

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Most of the changes to the README should be reverted. It's just an advertisement. Show people what's in the package to get them to open the docs. But it shouldn't go into detail about contributing etc. etc. that's all for deeper docs pages. Very quick overview, highlight how to use the package, and get someone to click the docs link.

Original file line number Diff line number Diff line change
@@ -1,119 +1,105 @@
# SymbolicIntegration.jl

*A unified interface for symbolic integration methods in Julia*
[![Build Status](https://github.com/JuliaSymbolics/SymbolicIntegration.jl/actions/workflows/CI.yml/badge.svg?branch=main)](https://github.com/JuliaSymbolics/SymbolicIntegration.jl/actions/workflows/CI.yml?query=branch%3Amain)
[![Spell Check](https://github.com/JuliaSymbolics/SymbolicIntegration.jl/actions/workflows/spellcheck.yml/badge.svg?branch=main)](https://github.com/JuliaSymbolics/SymbolicIntegration.jl/actions/workflows/spellcheck.yml)
[![Rules](https://img.shields.io/badge/dynamic/json?url=https://raw.githubusercontent.com/JuliaSymbolics/SymbolicIntegration.jl/main/.github/badges/rules-count.json&query=$.message&label=Total%20rules&color=blue)](https://github.com/JuliaSymbolics/SymbolicIntegration.jl)

SymbolicIntegration.jl provides a flexible, extensible framework for symbolic integration with multiple algorithm choices. The package uses method dispatch to allow users to select the most appropriate integration algorithm for their specific needs.

## Key Features
SymbolicIntegration.jl solves indefinite integrals using one of the implemented algorithms: Risch method and Rule based method

- 🎯 **Multiple Integration Methods**: Extensible method dispatch system
- ⚡ **Exact Symbolic Results**: Guaranteed correct symbolic integration
- 🔢 **Complex Root Handling**: Produces exact arctangent terms
- ⚙️ **Configurable Algorithms**: Method-specific options and behavior
- 🏗️ **Professional Interface**: SciML-style method selection

## Integration Methods

### RischMethod (Default)
Complete symbolic integration using the Risch algorithm from Manuel Bronstein's "Symbolic Integration I: Transcendental Functions".

**Capabilities:**
- ✅ **Rational functions**: Complete integration with Rothstein-Trager method
- ✅ **Transcendental functions**: Exponential, logarithmic using differential field towers
- ✅ **Complex roots**: Exact arctangent terms for complex polynomial roots
- ✅ **Integration by parts**: Logarithmic function integration
- ✅ **Trigonometric functions**: Via transformation to exponential form

**Function Classes:**
- Polynomial functions: `∫x^n dx`, `∫(ax^2 + bx + c) dx`
- Rational functions: `∫P(x)/Q(x) dx` → logarithmic and arctangent terms
- Exponential functions: `∫exp(f(x)) dx`, `∫x*exp(x) dx`
- Logarithmic functions: `∫log(x) dx`, `∫1/(x*log(x)) dx`
- Trigonometric functions: `∫sin(x) dx`, `∫cos(x) dx`, `∫tan(x) dx`

The framework is designed to support additional integration methods as they are developed.



## Installation
# Usage
```julia
julia> using Pkg; Pkg.add("SymbolicIntegration")
```
julia> using Pkg; Pkg.add("SymbolicIntegration") # installation

## Usage
julia> using SymbolicIntegration, Symbolics

### Basic Integration
julia> @variables x
1-element Vector{Num}:
x

```julia
using SymbolicIntegration, Symbolics
@variables x

# Default method (RischMethod) - most cases
integrate(x^2, x) # (1//3)*(x^3)
integrate(1/x, x) # log(x)
integrate(exp(x), x) # exp(x)
integrate(1/(x^2 + 1), x) # atan(x)
julia> integrate(exp(2x) + 2x^2 + sin(x))
(1//2)*exp(2x) + (2//3)*(x^3) - cos(x)
```
The first argument is the expression to integrate, second argument is the variable of integration. If the variable is not specified, it will be guessed from the expression. The +c is omitted :)

### Method Selection

You can explicitly choose a integration method like this:
```julia
# Explicit method choice
integrate(f, x, RischMethod())

# Method with configuration
risch = RischMethod(use_algebraic_closure=true, catch_errors=false)
integrate(f, x, risch)
```
or like this:
```julia
rbm = RuleBasedMethod(verbose=true, use_gamma=false)
integrate(f, x, rbm)
```

If no method is specified, first RischMethod will be tried, then RuleBasedMethod:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It should probably be flipped? Rule based should usually be much quicker to converge?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rule based is fast, but the first times you call it it's quite slow because of compliation time of all the rules callable objects. Aayush suggested to use PrecompileTools.jl to precompile a integrate call on a expression that uses a rule at the end of the list, to precompile them all. But I didn't yet do it. Anyway yes we could flip them

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Risch methods are super slow though. They can take a way long time to compute, and actually can have unbounded runtime.

Aayush suggested to use PrecompileTools.jl to precompile a integrate call on a expression that uses a rule at the end of the list, to precompile them all. But I didn't yet do it. Anyway yes we could flip them

Yeah I can handle that. Let's first just get something correct and good enough to merge, then follow up with some improvements.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes

```julia
julia> integrate(sqrt(x))
┌ Warning: NotImplementedError: integrand contains unsupported expression sqrt(x)
└ @ SymbolicIntegration ~/.julia/dev/SymbolicIntegration.jl_official/src/methods/risch/frontend.jl:826

### Complex Examples
> RischMethod failed returning ∫(sqrt(x), x)
> Trying with RuleBasedMethod...

(2//3)*(x^(3//2))
```
```julia
# Rational function with complex roots
f = (x^3 + x^2 + x + 2)/(x^4 + 3*x^2 + 2)
integrate(f, x) # (1//2)*log(2 + x^2) + atan(x)
julia> integrate(abs(x))
┌ Warning: NotImplementedError: integrand contains unsupported expression abs(x)
└ @ SymbolicIntegration ~/.julia/dev/SymbolicIntegration.jl_official/src/methods/risch/frontend.jl:826

> RischMethod failed returning ∫(abs(x), x)
> Trying with RuleBasedMethod...

# Integration by parts
integrate(log(x), x) # -x + x*log(x)
No rule found for ∫(abs(x), x)

> RuleBasedMethod failed returning ∫(abs(x), x)
> Sorry we cannot integrate this expression :(

# Nested transcendental functions
integrate(1/(x*log(x)), x) # log(log(x))
```

## Method Framework

SymbolicIntegration.jl uses a modern method dispatch system similar to other SciML packages:
# Integration Methods
Currently two algorithms are implemented: **Risch algorithm** and **Rule based integration**.

### Current Methods
- **RischMethod**: Complete symbolic integration (default)
feature | Risch | Rule based
--------|-------|-----------
rational functions | ✅ | ✅
non integers powers | ❌ | ✅
exponential functions | ✅ | ✅
logarithms | ✅ | ✅
trigonometric functions | ? | sometimes
hyperbolic functions | ✅ | sometimes
Nonelementary integrals | ❌ | most of them
Special functions | ❌ | ❌
more than one symbolic<br> variable in the expression | ❌ | ✅

### Method Configuration
```julia
# Research configuration (strict, complete)
RischMethod(use_algebraic_closure=true, catch_errors=false)
More info about them in the [methods documentation](methods/overview.md)

# Production configuration (robust, graceful)
RischMethod(use_algebraic_closure=true, catch_errors=true)
### Risch Method
Complete symbolic integration using the Risch algorithm from Manuel Bronstein's "Symbolic Integration I: Transcendental Functions".

# Performance configuration (faster, simpler)
RischMethod(use_algebraic_closure=false, catch_errors=true)
```
### RuleBasedMethod

### Extensibility
The framework is designed for easy extension with additional integration methods. The abstract type `AbstractIntegrationMethod` provides the foundation for implementing new algorithms.
This method uses a large number of integration rules that specify how to integrate various mathematical expressions. There are now more than 3400 rules impelmented.

## Documentation
# Documentation

Complete documentation with method selection guidance, algorithm details, and examples is available at:
**[https://symbolicintegration.juliasymbolics.org](https://symbolicintegration.juliasymbolics.org)**

## Citation

# Citation

If you use SymbolicIntegration.jl in your research, please cite:

```bibtex
@software{SymbolicIntegration.jl,
author = {Harald Hofstätter and contributors},
author = {Harald Hofstätter and Mattia Micheletta Merlin and Chris Rackauckas},
title = {SymbolicIntegration.jl: Symbolic Integration for Julia},
url = {https://github.com/JuliaSymbolics/SymbolicIntegration.jl},
year = {2023-2025}
Expand Down
Loading
Loading