Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
064ce4e
Correct normalization for complex quaternions
moble Mar 22, 2026
1aab438
Clarify spinor norm distinction in Lorentz rotor tests; update normal…
moble Mar 22, 2026
2eaefba
Use spinor norm for complexified quaternions
moble Mar 24, 2026
1216edf
Update projects to use workspaces
moble Mar 30, 2026
7ef33a7
Add support for private local notes in documentation build process
moble Mar 31, 2026
1a21ac8
Update .gitignore to ignore local notes and remove local_notes symlink
moble Apr 1, 2026
a01ee74
Tweak some testing rules
moble Apr 2, 2026
8b4ffef
Update some test simplifications for Symbolics
moble Apr 3, 2026
3ea4731
Simplify complex normalization signature
moble Apr 3, 2026
f1dc323
Update results for latexification
moble Apr 3, 2026
cc391b6
Simplify calling `_hypot`
moble Apr 3, 2026
0a2f9b3
Start GA page
moble Apr 6, 2026
987e00a
Remove LLM-related files
moble Apr 6, 2026
a30a7bd
Update geometric algebra documentation and add reference for quaterni…
moble Apr 8, 2026
c41de11
Explain dual and vector-bivector correspondence more clearly
moble Apr 22, 2026
cfd8cf1
Fix formatting
moble Apr 22, 2026
15385c3
Polish GA documentation
moble Apr 23, 2026
dc0a16f
Start STA page
moble Apr 23, 2026
5436733
Polish STA documentation
moble Apr 23, 2026
e155c06
Apply suggestions from code review
moble Apr 23, 2026
bd29fe1
Fix a lot of little Lorentz issues
moble Apr 24, 2026
0865dea
Fix a lot of little Lorentz issues
moble Apr 24, 2026
5af7c3d
Fix a lot of little Lorentz issues
moble Apr 24, 2026
0bcf761
Make local_notes function
moble Apr 24, 2026
7ce6e8f
Use consistent ordering conventions for components
moble Apr 24, 2026
be34358
Just make Lorentz a type alias
moble Apr 24, 2026
a6b3f02
Be more careful about input vectors
moble Apr 24, 2026
0d45201
More complete documentation
moble Apr 24, 2026
db50ef9
Add basic tests of simple rotations and boosts
moble Apr 24, 2026
5fb1458
Fix up some broken tex
moble Apr 24, 2026
892964d
Move GA and STA pages to bottom of sidebar
moble Apr 24, 2026
23232e6
Add methods for LinearAlgebra.normalize and .norm
moble Apr 25, 2026
db841cc
Use explicit imports
moble Apr 25, 2026
9e0bd3f
Remove stale dependency from main project
moble Apr 25, 2026
9436892
Automatically link to docs preview in PRs
moble Apr 25, 2026
f1cb6d9
Bump major version
moble Apr 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ jobs:
permissions:
contents: write
statuses: write
pull-requests: write
steps:
- uses: actions/checkout@v5
- uses: julia-actions/setup-julia@v2
Expand All @@ -80,4 +81,9 @@ jobs:
using Documenter: DocMeta, doctest
using Quaternionic
DocMeta.setdocmeta!(Quaternionic, :DocTestSetup, :(using Quaternionic); recursive=true)
doctest(Quaternionic)'
doctest(Quaternionic)'
- uses: marocchino/sticky-pull-request-comment@v2
if: github.event_name == 'pull_request'
with:
message: |
[Documentation preview](https://moble.github.io/Quaternionic.jl/previews/PR${{ github.event.pull_request.number }}/)
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,8 @@ benchmark/results.md

# Ignore my notes
notes
docs/src/local_notes

# LLM/AI tool configuration
.claude/
MEMORY.md
79 changes: 5 additions & 74 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
name = "Quaternionic"
uuid = "0756cd96-85bf-4b6f-a009-b5012ea7a443"
version = "4.0.0"
authors = ["Michael Boyle <michael.oliver.boyle@gmail.com>"]
version = "3.1.1"

[workspace]
projects = ["test", "docs"]

[deps]
LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
Expand All @@ -10,7 +13,6 @@ PrecompileTools = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
Requires = "ae029012-a4dd-5104-9daa-d747884805df"
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
TestItems = "1c621080-faea-4a02-84b6-bbd5e436b8fe"

[weakdeps]
ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2"
Expand All @@ -27,28 +29,19 @@ Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f"
ZygoteRules = "700de1a5-db45-46bc-99cf-38207098b444"

[extensions]
QuaternionicChainRulesExt = ["ChainRules", "ChainRulesCore"]
QuaternionicChainRulesCoreExt = "ChainRulesCore"
QuaternionicChainRulesExt = ["ChainRules", "ChainRulesCore"]
QuaternionicFastDifferentiationExt = "FastDifferentiation"
QuaternionicForwardDiffExt = "ForwardDiff"
QuaternionicLatexifyExt = "Latexify"
QuaternionicSymbolicsExt = "Symbolics"
QuaternionicZygoteExt = ["Zygote", "ZygoteRules", "ChainRulesCore", "StaticArraysCore"]

[compat]
Aqua = "0.8"
ChainRules = "1.72.6"
ChainRulesCore = "1"
ChainRulesTestUtils = "1.13.0"
Coverage = "1.7.0"
DifferentiationInterface = "0.7.8"
DifferentiationInterfaceTest = "0.10.2"
Documenter = "1.14.1"
DoubleFloats = "1.4.3"
EllipsisNotation = "1.8.0"
Enzyme = "0.13.82"
FastDifferentiation = "0.3.15, 0.4"
FiniteDifferences = "0.12.33"
ForwardDiff = "0.10, 1"
GenericLinearAlgebra = "0.3.11"
LaTeXStrings = "1"
Expand All @@ -58,71 +51,9 @@ Mooncake = "0.4.161"
PrecompileTools = "1.2"
Random = "1"
Requires = "1"
ReverseDiff = "1.16.1"
StaticArrays = "1.8.1"
StaticArraysCore = "1.4.3"
Symbolics = "0.1, 1, 2, 3, 4, 5, 6, 7"
Test = "1.11.0"
TestItemRunner = "1"
TestItems = "1"
Zygote = "0.7.10"
ZygoteRules = "0.2.7"
julia = "1.6"


[extras]
Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595"
ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2"
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
ChainRulesTestUtils = "cdddcdb0-9152-4a09-a978-84456f9df70a"
Coverage = "a2441757-f6aa-5fb2-8edb-039e3f45d037"
DifferentiationInterface = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63"
DifferentiationInterfaceTest = "a82114a7-5aa3-49a8-9643-716bb13727a3"
Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
DoubleFloats = "497a8b3b-efae-58df-a0af-a86822472b78"
EllipsisNotation = "da5c29d0-fa7d-589e-88eb-ea29b0a81949"
Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9"
FastDifferentiation = "eb9bf01b-bf85-4b60-bf87-ee5de06c00be"
FiniteDifferences = "26cc04aa-876d-5657-8c51-4c34ba976000"
ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6"
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267"
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
TestItemRunner = "f8b46487-2199-4994-9208-9a1283c18c0a"
Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f"
ZygoteRules = "700de1a5-db45-46bc-99cf-38207098b444"


[targets]
test = [
"Aqua",
"ChainRules",
"ChainRulesCore",
"ChainRulesTestUtils",
"Coverage",
"DifferentiationInterface",
"DifferentiationInterfaceTest",
"Documenter",
"DoubleFloats",
"EllipsisNotation",
"Enzyme",
"FastDifferentiation",
"FiniteDifferences",
"ForwardDiff",
"GenericLinearAlgebra",
"LinearAlgebra",
"Mooncake",
"Random",
"ReverseDiff",
"StaticArrays",
"StaticArraysCore",
"Symbolics",
"Test",
"TestItemRunner",
"Zygote",
"ZygoteRules",
]
3 changes: 3 additions & 0 deletions docs/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,6 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

[compat]
Documenter = "1"

[sources]
Quaternionic = {path = ".."}
26 changes: 26 additions & 0 deletions docs/local_notes.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Conditionally include private local notes when building docs. The directory
# `docs/src/local_notes` should be a symlink into a private notes git repo. When absent
# (e.g., in CI), `notes_pages` and `notes_remotes` are empty and the build proceeds
# normally.

function local_notes()
notes_src = joinpath(@__DIR__, "src", "local_notes")

if isdir(notes_src)
files = filter(f -> endswith(f, ".md"), readdir(notes_src; sort=true))
notes_pages = isempty(files) ? [] : ["Local Notes" => map(f -> "local_notes/$f", files)]
try
notes_root = readchomp(`git -C $(realpath(notes_src)) rev-parse --show-toplevel`)
notes_remote_url = readchomp(`git -C $notes_root remote get-url origin`)
# Parse both SSH (git@github.com:user/repo.git) and HTTPS (https://github.com/user/repo.git)
notes_slug = replace(notes_remote_url, r"^.*github\.com[:/]" => "", r"\.git$" => "")
notes_remotes = Dict(notes_root => Documenter.Remotes.GitHub(notes_slug))
return (notes_pages, notes_remotes)
catch err
@warn "Skipping local notes git remote configuration; docs build will continue without remotes for local notes." exception=(err, catch_backtrace()) notes_src=notes_src
return (notes_pages, Dict())
end
else
return ([], Dict())
end
end
9 changes: 8 additions & 1 deletion docs/make.jl
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ bib = CitationBibliography(

DocMeta.setdocmeta!(Quaternionic, :DocTestSetup, :(using Quaternionic); recursive=true)

include("local_notes.jl")
(notes_pages, notes_remotes) = local_notes()

makedocs(;
plugins=[bib],
sitename="Quaternionic.jl",
Expand All @@ -26,12 +29,16 @@ makedocs(;
),
authors="Michael Boyle <michael.oliver.boyle@gmail.com>",
repo=Remotes.GitHub("moble", "Quaternionic.jl"),
remotes=notes_remotes,
pages=[
"Introduction" => "index.md",
"Basics" => "manual.md",
"Functions of time" => "functions_of_time.md",
"Differentiating by quaternions" => "differentiation.md",
"All functions" => "functions.md"
"All functions" => "functions.md",
"Geometric Algebra" => "geometric_algebra.md",
"Spacetime Algebra" => "spacetime_algebra.md",
notes_pages...,
],
# doctest = false,
doctestfilters = [
Expand Down
7 changes: 7 additions & 0 deletions docs/serve.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# This simply uses `make.jl` in this directory to build the docs, then serves them locally.
# Run `julia --project=docs docs/serve.jl` from the top directory to execute this script.

#using Quaternionic
import LiveServer: servedocs

servedocs(; launch_browser=true)
Loading
Loading