Changeset 7589:15d46848c593


Ignore:
Timestamp:
11/13/07 13:52:22 (6 years ago)
Author:
Burcin Erocal <burcin@…>
Branch:
default
Message:

More PolyBoRi?.

Files:
5 edited

Legend:

Unmodified
Added
Removed
  • c_lib/include/ccobject.h

    r7584 r7589  
    5151} 
    5252 
     53/* Construct with three parameters */ 
     54template <class T, class P, class R, class Q> 
     55T* Construct_ppp(void* mem, const P &d, const R &e, const Q &f){ 
     56  return new(mem) T(d, e, f); 
     57} 
     58 
    5359/* Destruct */ 
    5460template <class T> 
  • c_lib/include/pb_wrap.h

    r7588 r7589  
    33#include "nf.h" 
    44#include "ccobject.h" 
     5 
     6// M4RI  
     7#define PACKED 1 
     8#include "M4RI/packedmatrix.h" 
     9#include "M4RI/grayflex.h" 
     10 
    511#include <sstream> 
    612#include <vector> 
  • sage/libs/polybori/decl.pxi

    r7588 r7589  
    3838 
    3939    ctypedef struct PBRing "BoolePolyRing": 
     40        bint (* isDegreeOrder)() 
    4041        int (* nVariables)() 
    4142        PBDD (* variable)(int n) 
     
    4849        int (* next "operator++")() 
    4950        int (* hash)() 
     51 
     52    ctypedef struct PBVar "BooleVariable": 
     53        int (* index)() 
     54        bint (* is_equal "operator==")(PBVar right) 
     55 
     56    PBVar* PBVar_construct_int "Construct_p<BooleVariable, int>" \ 
     57        (void *mem, int ind) 
     58 
     59    PBVar* PBVar_construct_pbvar "Construct_p<BooleVariable, BooleVariable>" \ 
     60        (void *mem, PBVar v) 
    5061 
    5162    ctypedef struct PBMonom "BooleMonomial": 
     
    6374    PBMonom* PBMonom_construct_pbmonom \ 
    6475            "Construct_p<BooleMonomial, BooleMonomial>" (void *mem, PBMonom m) 
     76    PBMonom* PBMonom_construct_pbvar \ 
     77            "Construct_p<BooleMonomial, BooleVariable>" (void *mem, PBVar m) 
    6578    PBMonom* PBMonom_construct_dd \ 
    6679            "Construct_p<BoolePolynomial, BooleMonomial::dd_type>" (void *mem, PBDD m) 
     
    195208        PBPolyVector (* minimalize)() 
    196209        PBPolyVector (* minimalizeAndTailReduce)() 
     210        PBPolyVector (* faugereStepDense)(PBPolyVector v) 
    197211 
    198212    int (* pairs_top_sugar)(GBStrategy strat) 
     
    211225    void GBStrategy_destruct "Destruct<GroebnerStrategy>"(GBStrategy *mem) 
    212226 
     227    PBRing get_current_ring "BoolePolyRing::ring"() 
    213228 
    214229    PBSet pb_recursively_insert "recursively_insert"(PBNavigator p,  
     
    225240        (PBPolyVector inp, GBStrategy strat, int average_steps, double delay_f) 
    226241 
     242    void pb_set_variable_name "BoolePolyRing::setRingVariableName" \ 
     243        (int idx, char* varname)  
     244 
     245    #M4RI initialization 
     246    void buildAllCodes() 
     247    void setupPackingMasks() 
  • sage/rings/polynomial/polybori.pxd

    r7588 r7589  
    2525cdef class BooleanMonomial(MonoidElement): 
    2626    cdef PBMonom _M 
     27    cdef BooleanPolynomial _add_c_impl(BooleanMonomial left, BooleanMonomial right) 
    2728 
    2829cdef class BooleanMonomialIterator: 
     
    5152    cdef PBPolyVectorIter _iter 
    5253    cdef PBPolyVector _obj 
     54 
     55cdef class VariableBlock_base: 
     56    cdef int size 
     57    cdef int start_index 
     58    cdef int offset 
     59    cdef public object __name__ 
     60 
     61cdef class BooleVariable: 
     62    cdef PBVar _V 
  • sage/rings/polynomial/polybori.pyx

    r7588 r7589  
    207207        return self._M.deg() 
    208208 
     209    def __len__(BooleanMonomial self): 
     210        return self._M.deg() 
     211 
    209212    def __iter__(self): 
    210213        return new_BMI_from_PBMonomIter(self._M, self._M.begin()) 
     
    216219        return m 
    217220 
     221    cdef BooleanPolynomial _add_c_impl(BooleanMonomial left, BooleanMonomial right): 
     222        cdef BooleanPolynomial res 
     223        res = new_BP_from_PBMonom( (<BooleanMonomial>left)._parent._ring, \ 
     224                                        (<BooleanMonomial>left)._M) 
     225        res._P.iadd_PBMonom((<BooleanMonomial>right)._M) 
     226        return res 
     227 
    218228    def __add__(self, right): 
    219         cdef BooleanPolynomial res 
    220         if PY_TYPE_CHECK(right, BooleanMonomial): 
    221             res = new_BP_from_PBMonom( (<BooleanMonomial>self)._parent._ring, \ 
    222                                             (<BooleanMonomial>self)._M) 
    223             res._P.iadd_PBMonom((<BooleanMonomial>right)._M) 
    224             return res 
    225         else: 
    226             #FIXME 
    227             raise NotImplementedError, "Adding %s and %s is not supported." % \ 
    228                                             (type(self), type(right)) 
     229        if PY_TYPE_CHECK(self, BooleanMonomial) and \ 
     230            PY_TYPE_CHECK(right, BooleanMonomial) and \ 
     231            (<BooleanMonomial>self)._parent._ring is \ 
     232                (<BooleanMonomial>right)._parent._ring: 
     233            return (<BooleanMonomial>self)._add_c_impl(right) 
     234 
     235        if PY_TYPE_CHECK(self, BooleanMonomial) and right == 1: 
     236            return (<BooleanMonomial>self)._add_c_impl(\ 
     237                (<BooleanMonomial>self)._parent()) 
     238 
     239        if self == 1 and PY_TYPE_CHECK(right, BooleanMonomial): 
     240            return (<BooleanMonomial>right)._add_c_impl(\ 
     241                (<BooleanMonomial>right)._parent()) 
    229242         
    230243 
     
    241254    cdef BooleanMonomial m = new_BM(parent) 
    242255    PBMonom_construct_pbmonom(&m._M,juice) 
     256    return m 
     257 
     258cdef inline BooleanMonomial new_BM_from_PBVar(parent, PBVar juice):  
     259    cdef BooleanMonomial m = new_BM(parent) 
     260    PBMonom_construct_pbvar(&m._M,juice) 
    243261    return m 
    244262 
     
    537555        PBSet_destruct(&self._S) 
    538556 
     557    def __call__(self): 
     558        return self 
     559 
    539560    def empty(self): 
    540561        return self._S.emptiness() 
     
    567588    s = <BooleSet>PY_NEW(BooleSet) 
    568589    s._S = juice 
     590    return s 
     591 
     592cdef inline BooleSet new_BS_from_PBDD(PBDD juice): 
     593    """ 
     594    Construct a new BooleSet 
     595    """ 
     596    cdef BooleSet s 
     597    s = <BooleSet>PY_NEW(BooleSet) 
     598    PBSet_construct_dd(&s._S, juice) 
    569599    return s 
    570600 
     
    707737        return self._S.containsOne() 
    708738 
     739    def faugereStepDense(self, BooleanPolynomialVector v): 
     740        return new_BPV_from_PBPolyVector(self._parent,  
     741                                    self._S.faugereStepDense(v._vec)) 
     742 
    709743    def minimalize(self): 
    710         cdef PBPolyVector v = self._S.minimalize() 
    711         return new_BPVI_from_PBPolyVectorIter(self._parent, v, v.begin()) 
     744        return new_BPV_from_PBPolyVector(self._parent, self._S.minimalize()) 
    712745 
    713746    def minimalizeAndTailReduce(self): 
    714         cdef PBPolyVector v = self._S.minimalizeAndTailReduce() 
    715         return new_BPVI_from_PBPolyVectorIter(self._parent, v, v.begin()) 
     747        return new_BPV_from_PBPolyVector(self._parent,  
     748                                    self._S.minimalizeAndTailReduce()) 
    716749 
    717750    def npairs(self): 
     
    772805        if name is 'optRedTailInLastBlock': 
    773806            return self._S.optRedTailInLastBlock, 
    774         if name is 'reduceByTailReduced': 
     807        if name is 'redByReduced': 
    775808            return self._S.reduceByTailReduced 
    776809        if name is 'monomials': 
     
    822855        elif name is 'optRedTailInLastBlock': 
    823856            self._S.optRedTailInLastBlock = val 
    824         elif name is 'reduceByTailReduced': 
     857        elif name is 'redByReduced': 
    825858            self._S.reduceByTailReduced = val 
    826859        else: 
     
    835868    n._N = juice 
    836869    return n 
     870 
     871cdef class BooleVariable: 
     872    def index(self): 
     873        return self._V.index() 
     874 
     875    def is_equal(self, BooleVariable other): 
     876        return self._V.is_equal(other._V) 
     877 
     878cdef inline BooleVariable new_BV_from_PBVar(PBVar juice): 
     879    """ 
     880    Construct a new BooleVariable 
     881    """ 
     882    cdef BooleVariable n 
     883    n = <BooleVariable>PY_NEW(BooleVariable) 
     884    n._V = juice 
     885    return n 
     886 
     887cdef inline BooleVariable new_BV_from_int(int juice): 
     888    """ 
     889    Construct a new BooleVariable 
     890    """ 
     891    cdef BooleVariable n 
     892    n = <BooleVariable>PY_NEW(BooleVariable) 
     893    PBVar_construct_int(&n._V, juice) 
     894    return n 
     895 
     896cdef class VariableBlock_base: 
     897    def __init__(self, size, start_index, offset): 
     898        self.size = size 
     899        self.start_index = start_index 
     900        self.offset = offset 
     901 
     902cdef class VariableBlockTrue(VariableBlock_base): 
     903    def __init__(self, size, start_index, offset): 
     904        VariableBlock_base.__init__(self, size, start_index, offset) 
     905 
     906    def __call__(self, int i): 
     907        cdef PBVar v 
     908        PBVar_construct_int(&v, self.offset+self.start_index+self.size-1-i) 
     909        return new_BM_from_PBVar(get_cring()._monom_monoid, v) 
     910 
     911cdef class VariableBlockFalse(VariableBlock_base): 
     912    def __init__(self, size, start_index, offset): 
     913        VariableBlock_base.__init__(self, size, start_index, offset) 
     914 
     915    def __call__(self, int i): 
     916        cdef PBVar v 
     917        PBVar_construct_int(&v, i-self.start_index+self.offset) 
     918        return new_BM_from_PBVar(get_cring()._monom_monoid, v) 
     919 
     920def VariableBlock(size, start_index, offset, reverse): 
     921    if reverse: 
     922        return VariableBlockFalse(size, start_index, offset) 
     923    else: 
     924        return VariableBlockTrue(size, start_index, offset) 
     925 
     926def init_M4RI(): 
     927    buildAllCodes() 
     928    setupPackingMasks() 
    837929 
    838930def recursively_insert(CCuddNavigator n, int ind, CCuddNavigator m): 
     
    862954 
    863955def change_ordering(order): 
     956    global cur_ring 
    864957    pb_change_ordering(order) 
     958    cur_ring._R = get_current_ring() 
    865959 
    866960def parallel_reduce(BooleanPolynomialVector inp, GroebnerStrategy strat, \ 
     
    869963        pb_parallel_reduce(inp._vec, strat._S, average_steps, delay_f)) 
    870964     
     965def have_degree_order():  
     966    global cur_ring  
     967    return cur_ring._R.isDegreeOrder()  
     968 
     969def set_variable_name( i, s): 
     970    pb_set_variable_name(i, s) 
     971 
    871972cdef BooleanPolynomialRing cur_ring 
    872973ring_callbacks = [] 
     
    885986    global ring_callbacks 
    886987    ring_callbacks.append(func) 
     988 
     989init_M4RI() 
Note: See TracChangeset for help on using the changeset viewer.