| 517 | } |
| 518 | |
| 519 | bool shape::transposed() const |
| 520 | { |
| 521 | if(this->dynamic()) |
| 522 | { |
| 523 | return false; |
| 524 | } |
| 525 | if(this->broadcasted()) |
| 526 | { |
| 527 | // TODO: Use a filter_iterator instead |
| 528 | std::vector<std::size_t> s; |
| 529 | s.reserve(this->strides().size()); |
| 530 | std::copy_if(this->strides().begin(), |
| 531 | this->strides().end(), |
| 532 | std::back_inserter(s), |
| 533 | [](std::size_t x) { return x != 0; }); |
| 534 | return not std::is_sorted(s.rbegin(), s.rend()); |
| 535 | } |
| 536 | else |
| 537 | { |
| 538 | return not std::is_sorted(this->strides().rbegin(), this->strides().rend()); |
| 539 | } |
| 540 | } |
| 541 | |
| 542 | bool shape::broadcasted() const |
| 543 | { |