| 1740 | return result; |
| 1741 | } |
| 1742 | shape_transform_descriptor shape_transform_descriptor::to_common_from_dst() const |
| 1743 | { |
| 1744 | shape_transform_descriptor result; |
| 1745 | result.rank = this->dimensions.size(); |
| 1746 | std::vector<dimension::sub> subs; |
| 1747 | // Update axes to point to the destination |
| 1748 | for(std::size_t i : range(dimensions.size())) |
| 1749 | { |
| 1750 | const auto& d = dimensions[i]; |
| 1751 | const bool mixed_visibility = |
| 1752 | std::any_of(d.subdimensions.begin(), |
| 1753 | d.subdimensions.end(), |
| 1754 | [](const dimension::sub& s) { return s.has_hidden_axis(); }) and |
| 1755 | std::any_of(d.subdimensions.begin(), |
| 1756 | d.subdimensions.end(), |
| 1757 | [](const dimension::sub& s) { return not s.has_hidden_axis(); }); |
| 1758 | std::transform(d.subdimensions.begin(), |
| 1759 | d.subdimensions.end(), |
| 1760 | range(d.subdimensions.size()).begin(), |
| 1761 | std::back_inserter(subs), |
| 1762 | [&](dimension::sub s, auto j) { |
| 1763 | set_origin_axis(s, {i}); |
| 1764 | s.add_split_axis(j); |
| 1765 | if(not mixed_visibility) |
| 1766 | s.expose(); |
| 1767 | return s; |
| 1768 | }); |
| 1769 | } |
| 1770 | if(dimensions.size() == 1 and subs.empty()) |
| 1771 | { |
| 1772 | transform(range(rank), std::back_inserter(subs), [](std::size_t i) -> dimension::sub { |
| 1773 | return {1, {0, i}}; |
| 1774 | }); |
| 1775 | } |
| 1776 | std::transform(subs.begin(), |
| 1777 | subs.end(), |
| 1778 | std::back_inserter(result.dimensions), |
| 1779 | [&](const auto& x) -> dimension { return {{x}}; }); |
| 1780 | renumber_axes(result.dimensions); |
| 1781 | return result; |
| 1782 | } |
| 1783 | shape_transform_descriptor shape_transform_descriptor::to_dst_from_common() const |
| 1784 | { |
| 1785 | shape_transform_descriptor result = *this; |
no test coverage detected