Changeset 7588:cfcfa40e45e2
- Timestamp:
- 11/11/07 13:02:05 (6 years ago)
- Branch:
- default
- Files:
-
- 4 edited
-
c_lib/include/pb_wrap.h (modified) (1 diff)
-
sage/libs/polybori/decl.pxi (modified) (5 diffs)
-
sage/rings/polynomial/polybori.pxd (modified) (1 diff)
-
sage/rings/polynomial/polybori.pyx (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
c_lib/include/pb_wrap.h
r7584 r7588 4 4 #include "ccobject.h" 5 5 #include <sstream> 6 #include <vector> 6 7 7 8 USING_NAMESPACE_PBORI 8 9 USING_NAMESPACE_PBORIGB 9 10 11 BoolePolynomial get_ith_gen(const GroebnerStrategy& strat, int i){ 12 return strat.generators[i].p; 13 } 14 15 static int pairs_top_sugar(const GroebnerStrategy& strat){ 16 if (strat.pairs.pairSetEmpty()) 17 return -1; 18 else 19 return (strat.pairs.queue.top().sugar); 20 } 21 22 static std::vector<BoolePolynomial> someNextDegreeSpolys(GroebnerStrategy& strat, int n){ 23 std::vector<BoolePolynomial> res; 24 assert(!(strat.pairs.pairSetEmpty())); 25 strat.pairs.cleanTopByChainCriterion(); 26 deg_type deg=strat.pairs.queue.top().sugar; 27 28 while((!(strat.pairs.pairSetEmpty())) && \ 29 (strat.pairs.queue.top().sugar<=deg) && (res.size()<n)){ 30 assert(strat.pairs.queue.top().sugar==deg); 31 res.push_back(strat.nextSpoly()); 32 strat.pairs.cleanTopByChainCriterion(); 33 } 34 return res; 35 } 36 -
sage/libs/polybori/decl.pxi
r7586 r7588 18 18 PBNavigator (* elseBranch) () 19 19 int (* value "operator*")() 20 bint (* isConstant)() 21 bint (* isTerminated)() 20 22 21 23 # non-allocating versions … … 99 101 int (* lmDeg)() 100 102 int (* length)() 103 int (* eliminationLength)() 101 104 bint (* isZero)() 102 105 bint (* isOne)() … … 110 113 PBPolyIter (* orderedEnd)() 111 114 void (* iadd "operator+=")(PBPoly right) 115 void (* iadd_PBMonom "operator+=")(PBMonom right) 112 116 void (* imul "operator*=")(PBPoly right) 113 117 void (* imul_monom "operator*=")(PBMonom right) 114 118 bint (* is_equal "operator==")(PBPoly right) 115 119 116 120 # non-allocating versions … … 137 141 object PBPoly_to_str "_to_PyString<BoolePolynomial>"(PBPoly *p) 138 142 139 ctypedef struct PBPoly_vector "std::vector<BoolePolynomial>": 143 ctypedef struct PBPolyVectorIter \ 144 "std::vector<BoolePolynomial>::iterator ": 145 PBPoly (* value "operator*")() 146 int (* next "operator++")() 147 148 bint PBPolyVectorIter_equal "operator=="(PBPolyVectorIter lhs, \ 149 PBPolyVectorIter rhs) 150 151 ctypedef struct PBPolyVector "std::vector<BoolePolynomial>": 140 152 int (* size)() 141 153 PBPoly (* get "operator[]")(int) 142 143 ctypedef struct GBStrategy "struct GroebnerStrategy": 154 PBPolyVectorIter (* begin)() 155 PBPolyVectorIter (* end)() 156 void (* push_back)(PBPoly val) 157 158 PBPolyVector* PBPolyVector_construct \ 159 "Construct< std::vector<BoolePolynomial> >"(void *mem) 160 void PBPolyVector_destruct "Destruct< std::vector<BoolePolynomial> >"\ 161 (PBPolyVector *mem) 162 163 ctypedef struct GBStrategy "GroebnerStrategy": 164 bint reduceByTailReduced 165 bint enabledLog 166 unsigned int reductionSteps 167 int normalForms 168 int currentDegree 169 int chainCriterions 170 int variableChainCriterions 171 int easyProductCriterions 172 int extendedProductCriterions 173 int averageLength 174 bint optRedTail 175 bint optLazy 176 bint optLL 177 bint optDelayNonMinimals 178 bint optBrutalReductions 179 bint optExchange 180 bint optAllowRecursion 181 bint optRedTailDegGrowth 182 bint optStepBounded 183 bint optLinearAlgebraInLastBlock 184 bint optRedTailInLastBlock 185 PBSet monomials 186 PBSet llReductor 187 bint (* containsOne)() 188 int (* addGenerator)(PBPoly, bint is_impl) 144 189 void (* addGeneratorDelayed)(PBPoly) 190 void (* addAsYouWish)(PBPoly) 145 191 void (* symmGB_F2)() 146 PBPoly_vector (* minimalize)() 192 void (* cleanTopByChainCriterion "pairs.cleanTopByChainCriterion")() 193 int (* nGenerators "generators.size")() 194 int (* npairs "pairs.queue.size")() 195 PBPolyVector (* minimalize)() 196 PBPolyVector (* minimalizeAndTailReduce)() 197 198 int (* pairs_top_sugar)(GBStrategy strat) 199 PBPolyVector (* someNextDegreeSpolys)(GBStrategy strat, int n) 200 201 PBPoly GB_get_ith_gen "get_ith_gen" (GBStrategy strat, int i) 147 202 148 203 # non-allocating versions 149 204 GBStrategy* GBStrategy_construct "Construct<GroebnerStrategy>"(void *mem) 205 GBStrategy* GBStrategy_construct_gbstrategy \ 206 "Construct_p<GroebnerStrategy, GroebnerStrategy>" \ 207 (void *mem, GBStrategy strat) 208 PBPoly* PBPoly_construct_dd \ 209 "Construct_p<BoolePolynomial, BoolePolyRing::dd_type>" \ 210 (void *mem, PBDD d) 150 211 void GBStrategy_destruct "Destruct<GroebnerStrategy>"(GBStrategy *mem) 151 212 … … 158 219 159 220 PBSet pb_mod_mon_set "mod_mon_set"(PBSet as, PBSet vs) 221 222 void pb_change_ordering "BoolePolyRing::changeOrdering" (ordercodes c) 223 224 PBPolyVector pb_parallel_reduce "parallel_reduce" \ 225 (PBPolyVector inp, GBStrategy strat, int average_steps, double delay_f) 226 -
sage/rings/polynomial/polybori.pxd
r7586 r7588 38 38 cdef BooleSet _obj 39 39 cdef BooleanPolynomialRing _ring 40 41 cdef class GroebnerStrategy: 42 cdef GBStrategy _S 43 cdef BooleanPolynomialRing _parent 44 45 cdef class BooleanPolynomialVector: 46 cdef PBPolyVector _vec 47 cdef BooleanPolynomialRing _parent 48 49 cdef class BooleanPolynomialVectorIterator: 50 cdef BooleanPolynomialRing _parent 51 cdef PBPolyVectorIter _iter 52 cdef PBPolyVector _obj -
sage/rings/polynomial/polybori.pyx
r7586 r7588 210 210 return new_BMI_from_PBMonomIter(self._M, self._M.begin()) 211 211 212 def_mul_c_impl(left, MonoidElement right):212 cdef MonoidElement _mul_c_impl(left, MonoidElement right): 213 213 cdef BooleanMonomial m = new_BM_from_PBMonom(\ 214 214 (<BooleanMonomial>left)._parent, (<BooleanMonomial>left)._M) 215 215 m._M.imul( (<BooleanMonomial>right)._M ) 216 216 return m 217 218 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 217 230 218 231 cdef inline BooleanMonomial new_BM(parent): … … 292 305 p._P.imul( (<BooleanPolynomial>right)._P ) 293 306 return p 294 307 308 def is_equal(self, BooleanPolynomial right): 309 #FIXME: change this to replace == operator 310 return self._P.is_equal(right._P) 311 295 312 def __iter__(self): 296 313 return new_BPI_from_PBPolyIter(self, self._P.orderedBegin()) … … 356 373 return new_BM_from_PBMonom(self._parent._monom_monoid, self._P.usedVariables()) 357 374 375 def elimination_length(self): 376 return self._P.eliminationLength() 377 358 378 def __len__(self): 359 379 return self._P.length() … … 365 385 if name == 'diagram': 366 386 return new_DD_from_PBDD(self._P.diagram()) 387 elif name == 'deg': 388 return self.total_degree 389 elif name == 'elength': 390 return self.elimination_length 367 391 elif name == 'lead': 368 392 return self.lm … … 414 438 cdef PBPoly t 415 439 cdef BooleanPolynomial p, r 416 cdef PBPoly _vector vec440 cdef PBPolyVector vec 417 441 cdef GBStrategy strat 418 442 … … 585 609 return new_CN_from_PBNavigator(self._N.thenBranch()) 586 610 611 def constant(self): 612 return self._N.isConstant() 613 614 def terminalOne(self): 615 return self._N.isTerminated() 616 617 cdef class BooleanPolynomialVector: 618 def __init__(self): 619 PBPolyVector_construct(&self._vec) 620 self._parent = get_cring() 621 622 def __dealloc__(self): 623 PBPolyVector_destruct(&self._vec) 624 625 def __iter__(self): 626 #return new_BPVI_from_PBPolyVectorIter(self._parent, self._vec, 627 # self._vec.begin()) 628 return BooleanPolynomialVectorIterator(self._parent, self) 629 630 def __len__(self): 631 return self._vec.size() 632 633 def __getitem__(self, ind): 634 return new_BP_from_PBPoly(self._parent, self._vec.get(ind)) 635 636 def append(self, BooleanPolynomial poly): 637 self._vec.push_back(poly._P) 638 639 cdef inline BooleanPolynomialVector new_BPV_from_PBPolyVector(\ 640 BooleanPolynomialRing parent, PBPolyVector juice): 641 cdef BooleanPolynomialVector m 642 m = <BooleanPolynomialVector>PY_NEW(BooleanPolynomialVector) 643 m._vec = juice 644 m._parent = parent 645 return m 646 647 cdef class BooleanPolynomialVectorIterator: 648 def __init__(self, BooleanPolynomialRing parent, 649 BooleanPolynomialVector vector): 650 self._parent = parent 651 self._obj = vector._vec 652 self._iter = self._obj.begin() 653 654 def __iter__(self): 655 return self 656 657 def __next__(self): 658 cdef PBPoly val 659 if PBPolyVectorIter_equal(self._iter, self._obj.end()): 660 raise StopIteration 661 662 val = self._iter.value() 663 self._iter.next() 664 return new_BP_from_PBPoly(self._parent, val) 665 666 cdef inline BooleanPolynomialVectorIterator new_BPVI_from_PBPolyVectorIter(\ 667 BooleanPolynomialRing parent, PBPolyVector juice, PBPolyVectorIter itr): 668 """ 669 Construct a new BooleanMonomialIterator 670 """ 671 cdef BooleanPolynomialVectorIterator m 672 m = <BooleanPolynomialVectorIterator>PY_NEW(BooleanPolynomialVectorIterator) 673 m._obj = juice 674 m._iter = itr 675 m._parent = parent 676 return m 677 678 679 cdef class GroebnerStrategy: 680 def __init__(self, param = None): 681 self._parent = get_cring() 682 if PY_TYPE_CHECK(param, GroebnerStrategy): 683 GBStrategy_construct_gbstrategy(&self._S, 684 (<GroebnerStrategy>param)._S) 685 else: 686 GBStrategy_construct(&self._S) 687 688 def __dealloc__(self): 689 GBStrategy_destruct(&self._S) 690 691 def addGeneratorDelayed(self, BooleanPolynomial p): 692 self._S.addGeneratorDelayed(p._P) 693 694 def addGenerator(self, BooleanPolynomial p, bint is_impl=False): 695 return self._S.addGenerator(p._P, is_impl) 696 697 def addAsYouWish(self, BooleanPolynomial p): 698 self._S.addAsYouWish(p._P) 699 700 def cleanTopByChainCriterion(self): 701 self._S.cleanTopByChainCriterion() 702 703 def symmGB_F2(self): 704 self._S.symmGB_F2() 705 706 def containsOne(self): 707 return self._S.containsOne() 708 709 def minimalize(self): 710 cdef PBPolyVector v = self._S.minimalize() 711 return new_BPVI_from_PBPolyVectorIter(self._parent, v, v.begin()) 712 713 def minimalizeAndTailReduce(self): 714 cdef PBPolyVector v = self._S.minimalizeAndTailReduce() 715 return new_BPVI_from_PBPolyVectorIter(self._parent, v, v.begin()) 716 717 def npairs(self): 718 return self._S.npairs() 719 720 def topSugar(self): 721 return pairs_top_sugar(self._S) 722 723 def someSpolysInNextDegree(self, n): 724 cdef PBPolyVector v = someNextDegreeSpolys(self._S, n) 725 return new_BPV_from_PBPolyVector(self._parent, v) 726 727 def __len__(self): 728 return self._S.nGenerators() 729 730 def __getitem__(self, int i): 731 return new_BP_from_PBPoly(self._parent, GB_get_ith_gen(self._S, i)) 732 733 def __getattr__(self, name): 734 if name is 'enabledLog': 735 return self._S.enabledLog 736 if name is 'reductionSteps': 737 return self._S.reductionSteps 738 if name is 'normalForms': 739 return self._S.normalForms 740 if name is 'currentDegree': 741 return self._S.currentDegree 742 if name is 'chainCriterions': 743 return self._S.chainCriterions 744 if name is 'variableChainCriterions': 745 return self._S.variableChainCriterions 746 if name is 'easyProductCriterions': 747 return self._S.easyProductCriterions 748 if name is 'extendedProductCriterions': 749 return self._S.extendedProductCriterions 750 if name is 'averageLength': 751 return self._S.averageLength 752 if name is 'optRedTail': 753 return self._S.optRedTail 754 if name is 'optLazy': 755 return self._S.optLazy 756 if name is 'optLL': 757 return self._S.optLL 758 if name is 'optDelayNonMinimals': 759 return self._S.optDelayNonMinimals 760 if name is 'optBrutalReductions': 761 return self._S.optBrutalReductions 762 if name is 'optExchange': 763 return self._S.optExchange 764 if name is 'optAllowRecursion': 765 return self._S.optAllowRecursion 766 if name is 'optRedTailDegGrowth': 767 return self._S.optRedTailDegGrowth 768 if name is 'optStepBounded': 769 return self._S.optStepBounded 770 if name is 'optLinearAlgebraInLastBlock': 771 return self._S.optLinearAlgebraInLastBlock 772 if name is 'optRedTailInLastBlock': 773 return self._S.optRedTailInLastBlock, 774 if name is 'reduceByTailReduced': 775 return self._S.reduceByTailReduced 776 if name is 'monomials': 777 return new_BS_from_PBSet(self._S.monomials) 778 if name is 'llReductor': 779 return new_BS_from_PBSet(self._S.llReductor) 780 else: 781 raise AttributeError, name 782 783 def __setattr__(self, name, val): 784 if name is 'enabledLog': 785 self._S.enabledLog = val 786 elif name is 'reductionSteps': 787 self._S.reductionSteps = val 788 elif name is 'normalForms': 789 self._S.normalForms = val 790 elif name is 'currentDegree': 791 self._S.currentDegree = val 792 elif name is 'chainCriterions': 793 self._S.chainCriterions = val 794 elif name is 'variableChainCriterions': 795 self._S.variableChainCriterions = val 796 elif name is 'easyProductCriterions': 797 self._S.easyProductCriterions = val 798 elif name is 'extendedProductCriterions': 799 self._S.extendedProductCriterions = val 800 elif name is 'averageLength': 801 self._S.averageLength = val 802 elif name == 'optRedTail': 803 self._S.optRedTail = val 804 elif name is 'optLazy': 805 self._S.optLazy = val 806 elif name is 'optLL': 807 self._S.optLL = val 808 elif name is 'optDelayNonMinimals': 809 self._S.optDelayNonMinimals = val 810 elif name is 'optBrutalReductions': 811 self._S.optBrutalReductions = val 812 elif name is 'optExchange': 813 self._S.optExchange = val 814 elif name is 'optAllowRecursion': 815 self._S.optAllowRecursion = val 816 elif name is 'optRedTailDegGrowth': 817 self._S.optRedTailDegGrowth = val 818 elif name is 'optStepBounded': 819 self._S.optStepBounded = val 820 elif name is 'optLinearAlgebraInLastBlock': 821 self._S.optLinearAlgebraInLastBlock = val 822 elif name is 'optRedTailInLastBlock': 823 self._S.optRedTailInLastBlock = val 824 elif name is 'reduceByTailReduced': 825 self._S.reduceByTailReduced = val 826 else: 827 raise AttributeError, name 828 587 829 cdef inline CCuddNavigator new_CN_from_PBNavigator(PBNavigator juice): 588 830 """ … … 615 857 return new_BS_from_PBSet(b) 616 858 859 def get_order_code(): 860 R = get_cring() 861 return (<BooleanPolynomialRing>R)._R.getOrderCode() 862 863 def change_ordering(order): 864 pb_change_ordering(order) 865 866 def parallel_reduce(BooleanPolynomialVector inp, GroebnerStrategy strat, \ 867 int average_steps, double delay_f): 868 return new_BPV_from_PBPolyVector(inp._parent, \ 869 pb_parallel_reduce(inp._vec, strat._S, average_steps, delay_f)) 870 617 871 cdef BooleanPolynomialRing cur_ring 618 872 ring_callbacks = []
Note: See TracChangeset
for help on using the changeset viewer.
