| 11 use nalgebra::{ |
11 use nalgebra::{ |
| 12 Matrix, Storage, StorageMut, OMatrix, Dim, DefaultAllocator, Scalar, |
12 Matrix, Storage, StorageMut, OMatrix, Dim, DefaultAllocator, Scalar, |
| 13 ClosedAddAssign, ClosedMulAssign, SimdComplexField, Vector, OVector, RealField, |
13 ClosedAddAssign, ClosedMulAssign, SimdComplexField, Vector, OVector, RealField, |
| 14 LpNorm, UniformNorm |
14 LpNorm, UniformNorm |
| 15 }; |
15 }; |
| 16 use nalgebra::Norm as NalgebraNorm; |
|
| 17 use nalgebra::base::constraint::{ |
16 use nalgebra::base::constraint::{ |
| 18 ShapeConstraint, SameNumberOfRows, SameNumberOfColumns |
17 ShapeConstraint, SameNumberOfRows, SameNumberOfColumns |
| 19 }; |
18 }; |
| 20 use nalgebra::base::dimension::*; |
19 use nalgebra::base::dimension::*; |
| 21 use nalgebra::base::allocator::Allocator; |
20 use nalgebra::base::allocator::Allocator; |
| 254 E : Float + Scalar + Zero + One + RealField, |
253 E : Float + Scalar + Zero + One + RealField, |
| 255 DefaultAllocator : Allocator<M> { |
254 DefaultAllocator : Allocator<M> { |
| 256 |
255 |
| 257 #[inline] |
256 #[inline] |
| 258 fn norm(&self, _ : L1) -> E { |
257 fn norm(&self, _ : L1) -> E { |
| 259 LpNorm(1).norm(self) |
258 nalgebra::Norm::norm(&LpNorm(1), self) |
| 260 } |
259 } |
| 261 } |
260 } |
| 262 |
261 |
| 263 impl<E,M,S> Dist<E, L1> |
262 impl<E,M,S> Dist<E, L1> |
| 264 for Vector<E,M,S> |
263 for Vector<E,M,S> |
| 266 S : Storage<E,M> + Clone, |
265 S : Storage<E,M> + Clone, |
| 267 E : Float + Scalar + Zero + One + RealField, |
266 E : Float + Scalar + Zero + One + RealField, |
| 268 DefaultAllocator : Allocator<M> { |
267 DefaultAllocator : Allocator<M> { |
| 269 #[inline] |
268 #[inline] |
| 270 fn dist<I : Instance<Self>>(&self, other : I, _ : L1) -> E { |
269 fn dist<I : Instance<Self>>(&self, other : I, _ : L1) -> E { |
| 271 LpNorm(1).metric_distance(self, other.ref_instance()) |
270 nalgebra::Norm::metric_distance(&LpNorm(1), self, other.ref_instance()) |
| 272 } |
271 } |
| 273 } |
272 } |
| 274 |
273 |
| 275 impl<E,M,S> Norm<E, L2> |
274 impl<E,M,S> Norm<E, L2> |
| 276 for Vector<E,M,S> |
275 for Vector<E,M,S> |
| 279 E : Float + Scalar + Zero + One + RealField, |
278 E : Float + Scalar + Zero + One + RealField, |
| 280 DefaultAllocator : Allocator<M> { |
279 DefaultAllocator : Allocator<M> { |
| 281 |
280 |
| 282 #[inline] |
281 #[inline] |
| 283 fn norm(&self, _ : L2) -> E { |
282 fn norm(&self, _ : L2) -> E { |
| 284 LpNorm(2).norm(self) |
283 nalgebra::Norm::norm(&LpNorm(2), self) |
| 285 } |
284 } |
| 286 } |
285 } |
| 287 |
286 |
| 288 impl<E,M,S> Dist<E, L2> |
287 impl<E,M,S> Dist<E, L2> |
| 289 for Vector<E,M,S> |
288 for Vector<E,M,S> |
| 291 S : Storage<E,M> + Clone, |
290 S : Storage<E,M> + Clone, |
| 292 E : Float + Scalar + Zero + One + RealField, |
291 E : Float + Scalar + Zero + One + RealField, |
| 293 DefaultAllocator : Allocator<M> { |
292 DefaultAllocator : Allocator<M> { |
| 294 #[inline] |
293 #[inline] |
| 295 fn dist<I : Instance<Self>>(&self, other : I, _ : L2) -> E { |
294 fn dist<I : Instance<Self>>(&self, other : I, _ : L2) -> E { |
| 296 LpNorm(2).metric_distance(self, other.ref_instance()) |
295 nalgebra::Norm::metric_distance(&LpNorm(2), self, other.ref_instance()) |
| 297 } |
296 } |
| 298 } |
297 } |
| 299 |
298 |
| 300 impl<E,M,S> Norm<E, Linfinity> |
299 impl<E,M,S> Norm<E, Linfinity> |
| 301 for Vector<E,M,S> |
300 for Vector<E,M,S> |
| 304 E : Float + Scalar + Zero + One + RealField, |
303 E : Float + Scalar + Zero + One + RealField, |
| 305 DefaultAllocator : Allocator<M> { |
304 DefaultAllocator : Allocator<M> { |
| 306 |
305 |
| 307 #[inline] |
306 #[inline] |
| 308 fn norm(&self, _ : Linfinity) -> E { |
307 fn norm(&self, _ : Linfinity) -> E { |
| 309 UniformNorm.norm(self) |
308 nalgebra::Norm::norm(&UniformNorm, self) |
| 310 } |
309 } |
| 311 } |
310 } |
| 312 |
311 |
| 313 impl<E,M,S> Dist<E, Linfinity> |
312 impl<E,M,S> Dist<E, Linfinity> |
| 314 for Vector<E,M,S> |
313 for Vector<E,M,S> |
| 316 S : Storage<E,M> + Clone, |
315 S : Storage<E,M> + Clone, |
| 317 E : Float + Scalar + Zero + One + RealField, |
316 E : Float + Scalar + Zero + One + RealField, |
| 318 DefaultAllocator : Allocator<M> { |
317 DefaultAllocator : Allocator<M> { |
| 319 #[inline] |
318 #[inline] |
| 320 fn dist<I : Instance<Self>>(&self, other : I, _ : Linfinity) -> E { |
319 fn dist<I : Instance<Self>>(&self, other : I, _ : Linfinity) -> E { |
| 321 UniformNorm.metric_distance(self, other.ref_instance()) |
320 nalgebra::Norm::metric_distance(&UniformNorm, self, other.ref_instance()) |
| 322 } |
321 } |
| 323 } |
322 } |
| 324 |
323 |
| 325 /// Helper trait to hide the symbols of [`nalgebra::RealField`]. |
324 /// Helper trait to hide the symbols of [`nalgebra::RealField`]. |
| 326 /// |
325 /// |