-
Notifications
You must be signed in to change notification settings - Fork 44
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Breaking release #198
Comments
@hyrodium @andyferris, it seems like |
Sorry for the inconvenience. |
The Lie algebra 𝔰𝔲(2) and 𝔰𝔬(3) are just 3-dimensional linear spaces. I think the easiest implementation will be like this: abstract type InfinitesimalRotation{N,T} <: StaticMatrix{N,N,T} end
struct InfinitesimalRotationVec{T} <: InfinitesimalRotation{3,T}
x::T
y::T
z::T
end
struct InfinitesimalAngle2d{T} <: InfinitesimalRotation{2,T}
v::T
end
exp(v::InfinitesimalRotationVec) = RotationVec(v.x, v.y, v.z)
exp(v::InfinitesimalRotation2d) = Angle2d(v.v)
log(::Rotation{3}) isa InfinitesimalRotationVec
log(::Rotation{2}) isa InfinitesimalAngle2d Does this make sense? (related: #190) |
No worries, and not urgent from my side -- it was easy to fix in my package by adding a coercion to |
Yeah, that makes sense to me. It might be slightly clearer to rename |
Yeah I too would name it for the matrix property (skew/antisymmetric). Hopefully eventually in LinearAlgebra we’ll have Orthogonal and Unitary and AntiHermitian one day, and we’ll be able to use that. My understanding with the recent release the previous behaviour was a bug (the rotations here are “just” matrices and the previous behaviour did not respect that). In hindsight it might have been easier for users to cope with the change if we had of made a major release, but now that the cat’s out of the bag I’m not so sure. When we have the new types that will warrant a minor release. |
I think we can introduce two subtypes of The name
I agree with that.
I agree with that, and #173 introduced a new bug: |
I agree that names like To be fair |
Hmm, if they have Is the length of the type name the only problem? |
What would be the difference between those two types? Would they be exactly the same except for what return value they produce when passed into
The abstract Lie algebra so3 is canonically identified with the set of 3x3 skew-symmetric matrices. So, based on the discussion around #171 (comment), I was assuming it would be more in the current spirit of this package to call the type |
These are almost identical. Here's the difference:
Thanks for the grreat naming 😁
Thanks, I'll try it. |
I'm currently implementing infinitesimal rotation in #199. Initially, I was planning to release v1.0.5 with as few new features as possible. However, I realized that incorporating Thus, I think the next release will be
|
Update:
|
Awesome stuff! It's so great to see all the energy going into improving this package :-) |
Yeah, much thanks everyone especially @hyrodium! @c42f @hyrodium, does ChainRulesCore.jl have a coordinate-free interface? Part of the benefit of working in the various different coordinate charts that Rotations.jl provides is that they allow one to avoid some of the numeric issues that come from singularities. I didn't read the docs deeply yet, but my assumption was that ChainRulesCore.jl is for maps from R^n to R^m (and maybe tensor products of those things) only. I am definitely interested in building an API for abstract manifolds, but that's a big project that I haven't yet seen be the focus for an AD package. |
The original issue is now solved with #203. julia> using Rotations
julia> q = QuatRotation(1., 0., 0., 0.)
3×3 QuatRotation{Float64} with indices SOneTo(3)×SOneTo(3)(Quaternion{Float64}(1.0, 0.0, 0.0, 0.0, true)):
1.0 0.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0
julia> log(q)
3×3 RotationVecGenerator{Float64} with indices SOneTo(3)×SOneTo(3)(0.0, 0.0, 0.0):
0.0 -0.0 0.0
0.0 0.0 -0.0
-0.0 0.0 0.0
julia> exp(log(q))
3×3 RotationVec{Float64} with indices SOneTo(3)×SOneTo(3)(0.0, 0.0, 0.0):
1.0 0.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0
julia> exp(log(q)) isa Rotation
true |
In v1.0.3, the return type of
log(::UnitQuaternion)
isUnitQuaternion
. In v1.0.4, it'sSMatrix{3, 3}
. I see from #175 (comment) that you already knew that. Yeah... I was relying on that type signature. Actually, what I was relying on was thatexp(log(::UnitQuaternion))
has typeUnitQuaternion
.The text was updated successfully, but these errors were encountered: