Skip to content

Commit f4100c6

Browse files
author
Andy Ferris
committed
Moved call(::Abstract...) to concrete types
1 parent 1b51e43 commit f4100c6

File tree

2 files changed

+16
-17
lines changed

2 files changed

+16
-17
lines changed

src/commontransformations.jl

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,6 @@ transformation_matrix(trans::AbstractAffineTransformation) = error("AbstractAffi
2525
translation_vector(trans::AbstractAffineTransformation) = error("AbstractAffineTransformation $(typeof(trans)) must implement translation_vector()")
2626
translation_vector_reverse(::AbstractAffineTransformation) = transformation_matrix(trans) \ translation_vector(trans)
2727

28-
# Default implementations
29-
@compat function (trans::AbstractAffineTransformation)(x)
30-
transformation_matrix(trans) * x + translation_vector(trans)
31-
end
32-
3328
# Could try do similar for transform_deriv_params()?
3429

3530
transform_deriv(trans::AbstractAffineTransformation, x) = transformation_matrix(trans)
@@ -77,11 +72,6 @@ function translation_vector_reverse(trans::AbstractLinearTransformation)
7772
return zeros(T, s)
7873
end
7974

80-
# Default implementations
81-
@compat function (trans::AbstractLinearTransformation)(x)
82-
transformation_matrix(trans) * x
83-
end
84-
8575
# transform_deriv() identical to that provided by AbstractAffineTransformation
8676

8777
function Base.isapprox(t1::AbstractLinearTransformation, t2::AbstractLinearTransformation; kwargs...)
@@ -121,10 +111,6 @@ abstract AbstractTranslation <: AbstractAffineTransformation
121111

122112
@inline transformation_matrix(::AbstractTranslation) = I
123113

124-
@compat function (trans::AbstractTranslation)(x)
125-
x + translation_vector(trans)
126-
end
127-
128114

129115
###################
130116
### Translation ###
@@ -136,14 +122,18 @@ end
136122
137123
Construct the `Translation` transformation for translating Cartesian points.
138124
"""
139-
immutable Translation{T} <: AbstractTranslation
140-
dx::T
125+
immutable Translation{VectorT} <: AbstractTranslation
126+
dx::VectorT
141127
end
142128
Translation(x::Tuple) = Translation(Vec(x))
143129
Translation(x,y) = Translation(Vec(x,y))
144130
Translation(x,y,z) = Translation(Vec(x,y,z))
145131
Base.show(io::IO, trans::Translation) = print(io, "Translation$((trans.dx...))")
146132

133+
@compat function (trans::Translation{V}){V}(x)
134+
x + translation_vector(trans)
135+
end
136+
147137
translation_vector(trans::Translation) = trans.dx
148138

149139
# Generic definitions that capture all `Translation`s.
@@ -174,6 +164,11 @@ LinearTransformation(trans::AbstractLinearTransformation) = LinearTransformation
174164

175165
Base.show(io::IO, trans::LinearTransformation) = print(io, "LinearTransformation($(trans.M))") # TODO make this output more petite
176166

167+
@compat function (trans::LinearTransformation{M}){M}(x)
168+
transformation_matrix(trans) * x
169+
end
170+
171+
177172
@inline transformation_matrix(trans::LinearTransformation) = trans.M
178173

179174
# Generic definitions
@@ -209,6 +204,10 @@ function AffineTransformation(trans::AbstractAffineTransformation)
209204
AffineTransformation(transformation_matrix(trans), translation_vector(trans))
210205
end
211206

207+
@compat function (trans::AffineTransformation{M,V}){M,V}(x)
208+
transformation_matrix(trans) * x + translation_vector(trans)
209+
end
210+
212211
# We can create an Affine transformation corresponding to the differential
213212
# transformation of x + dx
214213
#

src/core.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ end
9595
A matrix describing how differentials on the parameters of `trans` flow through
9696
to the output of transformation `trans` given input `x`.
9797
"""
98-
transform_deriv(trans::Transformation, x) = error("Differential matrix of parameters of transform $trans with input $x not defined")
98+
transform_deriv_params(trans::Transformation, x) = error("Differential matrix of parameters of transform $trans with input $x not defined")
9999

100100
transform_deriv_params(::IdentityTransformation, x) = error("IdentityTransformation has no parameters")
101101

0 commit comments

Comments
 (0)