|
2349 | 2349 | "operations, for example `A.'*B` lowering to `At_mul_B(A, B)`, "
|
2350 | 2350 | "`A\\B.'` lowering to `A_ldiv_Bt(A, B)`, and `A.'/B.'` "
|
2351 | 2351 | "lowering to `At_rdiv_Bt(A, B)`, has been removed "
|
2352 |
| - "in favor of a lazy `Transpose` wrapper type and " |
| 2352 | + "in favor of lazy transposition via `transpose`, " |
| 2353 | + "a corresponding lazy `Transpose` wrapper type, and " |
2353 | 2354 | "dispatch on that type. Two rewrites for `A.'` for "
|
2354 |
| - "matrix `A` exist: eager or materializing `transpose(A)`, " |
2355 |
| - "which constructs a freshly allocated matrix of `A`'s type " |
2356 |
| - "and containing the transpose of `A`, and lazy " |
2357 |
| - "`Transpose(A)`, which wraps `A` in a `Transpose` " |
2358 |
| - "view type. Which rewrite is appropriate depends on " |
| 2355 | + "matrix `A` exist: " |
| 2356 | + "`transpose(A)`, which yields a lazily transposed " |
| 2357 | + "version of `A` (often by wrapping in the `Transpose` type), " |
| 2358 | + "and `copy(transpose(A))` which lazily transposes " |
| 2359 | + "`A` as above and then materializes that lazily " |
| 2360 | + "transposed `A` into a freshly allocated matrix " |
| 2361 | + "of `A`'s type. Which rewrite is appropriate depends on " |
2359 | 2362 | "context: If `A.'` appears in a multiplication, "
|
2360 | 2363 | "left-division, or right-division operation that "
|
2361 | 2364 | "was formerly specially lowered to an `A_mul_B`-like "
|
2362 |
| - "call, then the lazy `Tranpose(A)` is the correct " |
| 2365 | + "call, then the lazy `tranpose(A)` is the correct " |
2363 | 2366 | "replacement and will result in dispatch to a method "
|
2364 | 2367 | "equivalent to the former `A_mul_B`-like call. For "
|
2365 | 2368 | "example, `A.'*B`, formerly yielding `At_mul_B(A, B)`, "
|
2366 |
| - "should be rewritten `Transpose(A)*B`, which will " |
| 2369 | + "should be rewritten `transpose(A)*B`, which will " |
2367 | 2370 | "dispatch to a method equivalent to the former "
|
2368 | 2371 | "`At_mul_B(A, B)` method. If `A.'` appears outside "
|
2369 |
| - "such an operation, then `transpose(A)` is the " |
2370 |
| - "correct rewrite. For vector `A`, `A.'` already " |
2371 |
| - "transposed lazily to a `RowVector`, so `Transpose(A)`. " |
| 2372 | + "such an operation, then `copy(transpose(A))` is the " |
| 2373 | + "functionally equivalent rewrite. For vector `A`, `A.'` already " |
| 2374 | + "transposed lazily to a `RowVector`, so `transpose(A)`, " |
2372 | 2375 | "which now yields a `Transpose`-wrapped vector "
|
2373 |
| - "behaviorally equivalent to the former `RowVector` " |
| 2376 | + "behaviorally equivalent to the former `RowVector`, " |
2374 | 2377 | "is always the correct rewrite for vectors. For "
|
2375 | 2378 | "more information, see issue #5332 on Julia's "
|
2376 | 2379 | "issue tracker on GitHub." #\newline) #f)
|
|
0 commit comments