All Downloads are FREE. Search and download functionalities are using the official Maven repository.

z3-z3-4.13.0.src.math.lp.permutation_matrix_def.h Maven / Gradle / Ivy

The newest version!
/*++
Copyright (c) 2017 Microsoft Corporation

Module Name:

    

Abstract:

    

Author:

    Lev Nachmanson (levnach)

Revision History:


--*/
#pragma once

#include "util/vector.h"
#include "math/lp/permutation_matrix.h"
namespace lp {
template  permutation_matrix::permutation_matrix(unsigned length): m_permutation(length), m_rev(length)  {
    for (unsigned i = 0; i < length; i++) { // do not change the direction of the loop because of the vectorization bug in clang3.3
        m_permutation[i] = m_rev[i] = i;
    }
}

template  permutation_matrix::permutation_matrix(unsigned length, vector const & values): m_permutation(length), m_rev(length) {
    for (unsigned i = 0; i < length; i++) {
        set_val(i, values[i]);
    }
}
// create a unit permutation of the given length
template  void permutation_matrix::init(unsigned length) {
    m_permutation.resize(length);
    m_rev.resize(length);
    for (unsigned i = 0; i < length; i++) {
        m_permutation[i] = m_rev[i] = i;
    }
}

#ifdef Z3DEBUG
template  void permutation_matrix::print(std::ostream & out) const {
    out << "[";
    for (unsigned i = 0; i < size(); i++) {
        out << m_permutation[i];
        if (i < size() - 1) {
            out << ",";
        } else {
            out << "]";
        }
    }
    out << std::endl;
}
#endif


template  void permutation_matrix::transpose_from_left(unsigned i, unsigned j) {
    // the result will be this = (i,j)*this
    lp_assert(i < size() && j < size() && i != j);
    auto pi = m_rev[i];
    auto pj = m_rev[j];
    set_val(pi, j);
    set_val(pj, i);
}

template  void permutation_matrix::transpose_from_right(unsigned i, unsigned j) {
    // the result will be this = this * (i,j)
    lp_assert(i < size() && j < size() && i != j);
    auto pi = m_permutation[i];
    auto pj = m_permutation[j];
    set_val(i, pj);
    set_val(j, pi);
}


}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy