| 500 | // Returns the result of a 2D pad on an input matrix. |
| 501 | template <typename NativeT> |
| 502 | static std::unique_ptr<Array2D<NativeT>> PadArray2D( |
| 503 | const Array2D<NativeT>& operand, const PaddingConfig& padding, |
| 504 | const NativeT pad) { |
| 505 | int64 in0 = operand.n1(); |
| 506 | int64 high_padding0 = padding.dimensions(0).edge_padding_high(); |
| 507 | int64 low_padding0 = padding.dimensions(0).edge_padding_low(); |
| 508 | int64 interior_padding0 = padding.dimensions(0).interior_padding(); |
| 509 | int64 out0 = |
| 510 | in0 + low_padding0 + high_padding0 + (in0 - 1) * interior_padding0; |
| 511 | |
| 512 | int64 in1 = operand.n2(); |
| 513 | int64 high_padding1 = padding.dimensions(1).edge_padding_high(); |
| 514 | int64 low_padding1 = padding.dimensions(1).edge_padding_low(); |
| 515 | int64 interior_padding1 = padding.dimensions(1).interior_padding(); |
| 516 | int64 out1 = |
| 517 | in1 + low_padding1 + high_padding1 + (in1 - 1) * interior_padding1; |
| 518 | |
| 519 | auto result = absl::make_unique<Array2D<NativeT>>(out0, out1); |
| 520 | result->Fill(pad); |
| 521 | int64 o0 = low_padding0; |
| 522 | for (int64 i0 = 0; i0 < in0; ++i0) { |
| 523 | int64 o1 = low_padding1; |
| 524 | for (int64 i1 = 0; i1 < in1; ++i1) { |
| 525 | if (o0 >= 0 && o1 >= 0 && o0 < out0 && o1 < out1) { |
| 526 | (*result)(o0, o1) = operand(i0, i1); |
| 527 | } |
| 528 | o1 += interior_padding1 + 1; |
| 529 | } |
| 530 | o0 += interior_padding0 + 1; |
| 531 | } |
| 532 | return result; |
| 533 | } |
| 534 | |
| 535 | // Returns the result of a 3D pad on an input matrix. |
| 536 | template <typename NativeT> |
nothing calls this directly
no test coverage detected