MCPcopy Create free account
hub / github.com/DeepRec-AI/DeepRec / PadArray4D

Method PadArray4D

tensorflow/compiler/xla/reference_util.h:595–640  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

593 // Returns the result of a 4D pad on an input array.
594 template <typename NativeT>
595 static Array4D<NativeT> PadArray4D(const Array4D<NativeT>& operand,
596 const PaddingConfig& padding,
597 const NativeT pad) {
598 CHECK_EQ(padding.dimensions_size(), 4);
599
600 const int64 input_bounds[] = {operand.n1(), operand.n2(), operand.n3(),
601 operand.n4()};
602 int64 pad_low[4];
603 int64 pad_high[4];
604 int64 pad_interior[4];
605 int64 output_bounds[4];
606 for (int64 i = 0; i < 4; ++i) {
607 pad_low[i] = padding.dimensions(i).edge_padding_low();
608 pad_high[i] = padding.dimensions(i).edge_padding_high();
609 CHECK_LE(0, padding.dimensions(i).interior_padding())
610 << "not implemented";
611 pad_interior[i] = padding.dimensions(i).interior_padding();
612
613 output_bounds[i] = pad_low[i] + input_bounds[i] + pad_high[i] +
614 (input_bounds[i] - 1) * pad_interior[i];
615 }
616
617 Array4D<NativeT> result(output_bounds[0], output_bounds[1],
618 output_bounds[2], output_bounds[3]);
619 result.Each(
620 [&](absl::Span<const int64> indices, NativeT* value) {
621 for (int i = 0; i < 4; ++i) {
622 bool in_low_padding = indices[i] < pad_low[i];
623 bool in_high_padding = indices[i] >= output_bounds[i] - pad_high[i];
624 if (in_low_padding || in_high_padding) {
625 *value = pad;
626 return;
627 }
628 if (pad_interior[i] &&
629 (indices[i] - pad_low[i]) % (pad_interior[i] + 1)) {
630 *value = pad;
631 return;
632 }
633 }
634 *value = operand((indices[0] - pad_low[0]) / (pad_interior[0] + 1),
635 (indices[1] - pad_low[1]) / (pad_interior[1] + 1),
636 (indices[2] - pad_low[2]) / (pad_interior[2] + 1),
637 (indices[3] - pad_low[3]) / (pad_interior[3] + 1));
638 });
639 return result;
640 }
641
642 // ApplyElementwise2D(f, x, y, ...) returns the Array2D formed by running
643 // f(x[i], y[i], ...) for each array element in the Array2Ds x, y, ....

Callers

nothing calls this directly

Calls 7

dimensions_sizeMethod · 0.80
n4Method · 0.80
n1Method · 0.45
n2Method · 0.45
n3Method · 0.45
dimensionsMethod · 0.45
EachMethod · 0.45

Tested by

no test coverage detected