Changeset 55b8ae in git
- Timestamp:
- Aug 29, 2000, 4:10:31 PM (23 years ago)
- Branches:
- (u'spielwiese', '8e0ad00ce244dfd0756200662572aef8402f13d5')
- Children:
- 05e7d13dce909dfa04b941da1c487b7c2a3a6044
- Parents:
- b0bcea8fcc65d5fbdb1a6adb65122ac0da740929
- Location:
- Singular
- Files:
-
- 10 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/tst.lib
rb0bcea r55b8ae 1 // $Id: tst.lib,v 1.2 4 2000-08-14 11:26:30obachman Exp $1 // $Id: tst.lib,v 1.25 2000-08-29 14:10:31 obachman Exp $ 2 2 //(obachman, last modified 6/30/98) 3 3 ///////////////////////////////////////////////////////////////////////////// 4 4 5 version="$Id: tst.lib,v 1.2 4 2000-08-14 11:26:30obachman Exp $";5 version="$Id: tst.lib,v 1.25 2000-08-29 14:10:31 obachman Exp $"; 6 6 info=" 7 7 LIBRARY: tst.lib PROCEDURES FOR RUNNING AUTOMATIC TST TESTS … … 528 528 } 529 529 530 ///////////////////////////////////////////////////////////////////////////// 531 proc tst_rgen_init_weights(int n) 532 { 533 intvec v = 1..n; 534 return (v); 535 } 536 537 538 proc tst_rgen_generate_block(int n_vars, string simple_ordering, int extra_weights) 539 { 540 string order = simple_ordering; 541 if (extra_weights > n_vars) 542 { 543 extra_weights = n_vars; 544 } 545 546 if ((simple_ordering[1] == "W") || (simple_ordering[1] == "w")) 547 { 548 order = order + "(" + string(tst_rgen_init_weights(n_vars)) + ")"; 549 } 550 else 551 { 552 if (simple_ordering[1] == "M") 553 { 554 order = order + "(" + string(tst_rgen_init_weights(n_vars*n_vars)) + ")"; 555 } 556 else 557 { 558 order = order + "(" + string(n_vars) + ")"; 559 } 560 } 561 if (extra_weights >= 1) 562 { 563 order = "a(" + string(tst_rgen_init_weights(extra_weights)) + ")," + order; 564 } 565 return (order); 566 } 567 568 proc tst_rgen_generate_blocks(int n_vars, list simple_orderings, intvec extra_weights) 569 { 570 int i; 571 int j; 572 list blocks; 573 574 for (i=1; i<=size(simple_orderings); i++) 575 { 576 for (j=1; j<=size(extra_weights); j++) 577 { 578 blocks = blocks + list(tst_rgen_generate_block(n_vars, simple_orderings[i], extra_weights[j])); 579 } 580 } 581 return (blocks); 582 } 583 584 proc tst_rgen_generate_product_orderings(int n_vars, list simple_orderings, intvec extra_weights, intvec products) 585 { 586 list p_orderings; 587 int i; 588 int nn_vars, j, k,l; 589 list nb_orderings; 590 string n_ordering; 591 592 for (i=1;i<=size(products);i++) 593 { 594 if (products[i] > 1 && products[i] <= n_vars) 595 { 596 nn_vars = n_vars / products[i]; 597 nb_orderings = tst_rgen_generate_blocks(nn_vars, simple_orderings, extra_weights); 598 for (j=1; j<=size(nb_orderings); j++) 599 { 600 n_ordering = nb_orderings[j]; 601 for (k=2; k<=products[i]; k++) 602 { 603 l = (j + k - 1) % size(nb_orderings); 604 if (l == 0) 605 { 606 l = size(nb_orderings); 607 } 608 n_ordering = n_ordering + "," + nb_orderings[l]; 609 } 610 if (products[i]*nn_vars < n_vars) 611 { 612 n_ordering = n_ordering + ", lp"; 613 } 614 p_orderings = p_orderings + list(n_ordering); 615 } 616 } 617 else 618 { 619 if (products[i] == 1) 620 { 621 p_orderings = p_orderings + tst_rgen_generate_blocks(n_vars, simple_orderings, extra_weights); 622 } 623 } 624 } 625 if (size(p_orderings) < 1) 626 { 627 p_orderings = tst_rgen_generate_blocks(n_vars, simple_orderings, extra_weights); 628 } 629 return (p_orderings); 630 } 631 632 633 proc tst_rgen_init() 634 { 635 if (! defined(tst_rgen_charstrs)) 636 { 637 list tst_rgen_charstrs; 638 export(tst_rgen_charstrs); 639 tst_rgen_charstrs = list("32003", "0"); 640 } 641 if (! defined(tst_rgen_nvars)) 642 { 643 intvec tst_rgen_nvars; 644 export(tst_rgen_nvars); 645 tst_rgen_nvars = 1..10; 646 } 647 if (! defined(tst_rgen_simple_orderings)) 648 { 649 list tst_rgen_simple_orderings; 650 export(tst_rgen_simple_orderings); 651 tst_rgen_simple_orderings = list("lp", "dp", "Dp", "ls", "ds", "Ds", "wp","Wp","ws","Ws","M"); 652 } 653 if (! defined(tst_rgen_comp_orderings)) 654 { 655 list tst_rgen_comp_orderings; 656 export(tst_rgen_comp_orderings); 657 tst_rgen_comp_orderings = list("", "C", "c", "CC", "cc"); 658 } 659 if (! defined(tst_rgen_products)) 660 { 661 intvec tst_rgen_products; 662 export(tst_rgen_products); 663 tst_rgen_products = 1..3; 664 } 665 if (! defined(tst_rgen_extra_weights)) 666 { 667 intvec tst_rgen_extra_weights; 668 export(tst_rgen_extra_weights); 669 tst_rgen_extra_weights = 0..2; 670 } 671 672 if (! defined(tst_rgen_char_index)) 673 { 674 int tst_rgen_char_index, tst_rgen_var_index, tst_rgen_comp_index, tst_rgen_ordering_index; 675 list tst_rgen_orderings; 676 export (tst_rgen_char_index, tst_rgen_var_index, tst_rgen_comp_index, tst_rgen_ordering_index, tst_rgen_orderings); 677 } 678 679 tst_rgen_char_index = 1; 680 tst_rgen_var_index = 1; 681 tst_rgen_comp_index = 1; 682 tst_rgen_ordering_index = 1; 683 tst_rgen_orderings = tst_rgen_generate_product_orderings(tst_rgen_nvars[1], tst_rgen_simple_orderings, tst_rgen_extra_weights, tst_rgen_products); 684 } 685 686 proc tst_next_ring() 687 { 688 tst_rgen_ordering_index++; 689 if (tst_rgen_ordering_index > size(tst_rgen_orderings)) 690 { 691 tst_rgen_comp_index++; 692 if (tst_rgen_comp_index > size(tst_rgen_comp_orderings)) 693 { 694 tst_rgen_var_index++; 695 if (tst_rgen_var_index > size(tst_rgen_nvars)) 696 { 697 tst_rgen_char_index++; 698 if (tst_rgen_char_index > size(tst_rgen_charstrs)) 699 { 700 return (""); 701 } 702 tst_rgen_var_index = 1; 703 } 704 tst_rgen_comp_index = 1; 705 tst_rgen_orderings = tst_rgen_generate_product_orderings(tst_rgen_nvars[tst_rgen_var_index], tst_rgen_simple_orderings, tst_rgen_extra_weights, tst_rgen_products); 706 } 707 tst_rgen_ordering_index = 1; 708 } 709 710 string rs = "(" + tst_rgen_charstrs[tst_rgen_char_index] + "),(" + A_Z("a", tst_rgen_nvars[tst_rgen_var_index]) + "),("; 711 712 if (tst_rgen_comp_orderings[tst_rgen_comp_index] == "CC") 713 { 714 rs = rs + "C," + tst_rgen_orderings[tst_rgen_ordering_index]; 715 } 716 else 717 { 718 if (tst_rgen_comp_orderings[tst_rgen_comp_index] == "cc") 719 { 720 rs = rs + "c," + tst_rgen_orderings[tst_rgen_ordering_index]; 721 } 722 else 723 { 724 if (tst_rgen_comp_orderings[tst_rgen_comp_index] == "C") 725 { 726 rs = rs + tst_rgen_orderings[tst_rgen_ordering_index] + ", C"; 727 } 728 else 729 { 730 if (tst_rgen_comp_orderings[tst_rgen_comp_index] == "c") 731 { 732 rs = rs + tst_rgen_orderings[tst_rgen_ordering_index] + ",c"; 733 } 734 else 735 { 736 rs = rs + tst_rgen_orderings[tst_rgen_ordering_index]; 737 } 738 } 739 } 740 } 741 rs = rs + ")"; 742 return (rs); 743 } 744 745 746 proc tst_rgen_test() 747 { 748 tst_rgen_init(); 749 string rs = tst_next_ring(); 750 751 while (size(rs) > 1) 752 { 753 rs; 754 rs = "ring r = " + rs + ";"; 755 execute (rs); 756 rs = tst_next_ring(); 757 } 758 } 759 760 proc tst_AddIdeal(ideal id, int how_often) 761 { 762 int i, j, k, l; 763 poly p; 764 if (! defined(db_print)) 765 { 766 int db_print = 0; 767 export db_print; 768 } 769 770 for (i=1; i<= size(id); i++) 771 { 772 if (id[i] == 0) 773 { 774 id[i] = 1; 775 } 776 } 777 dbprint(db_print, id); 778 dbprint(db_print, ""); 779 ideal idl = lead(id); 780 ideal idr = id; 781 l = 0; 782 for (j=1; j<= how_often; j++) 783 { 784 l++; 785 if (l > size(id)) 786 { 787 l=1; 788 } 789 for (k=1; k<=size(id); k++) 790 { 791 p = id[k] + idl[l]*idr[k]; 792 dbprint(db_print, p); 793 for (i=1; i<=k; i++) 794 { 795 dbprint(db_print, idr[i]); 796 p = p + idr[i]; 797 dbprint(db_print, p); 798 dbprint(db_print, ""); 799 } 800 idr[k] = p; 801 } 802 } 803 return (idr); 804 } 805 806 807 proc tst_AddModule(ideal id, int how_often) 808 { 809 int i, j, k, l; 810 vector v; 811 if (! defined(db_print)) 812 { 813 int db_print = 0; 814 export db_print; 815 } 816 817 for (i=1; i<= size(id); i++) 818 { 819 if (id[i] == 0) 820 { 821 id[i] = 1; 822 } 823 } 824 ideal idl = lead(id); 825 module m = id; 826 827 dbprint(db_print, id); 828 dbprint(db_print, ""); 829 l = 0; 830 for (j=1; j<= how_often; j++) 831 { 832 l++; 833 if (l > size(id)) 834 { 835 l=1; 836 } 837 for (k=1; k<=size(id); k++) 838 { 839 v = gen(k)*id[k]; 840 v = v + idl[l]*m[k]; 841 dbprint(db_print, v); 842 for (i=1; i<=k; i++) 843 { 844 dbprint(db_print, m[i]); 845 v = v + m[i]; 846 dbprint(db_print, v); 847 dbprint(db_print, ""); 848 } 849 m[k] = v; 850 } 851 } 852 return (m); 853 } 854 855 proc tst_TotalSize(def id) 856 { 857 int i, s; 858 859 for (i=1; i<=size(id); i++) 860 { 861 s = s + size(id[i]); 862 } 863 return (s); 864 } 865 866 proc tst_PrintStats(def id) 867 { 868 int i, is, s; 869 870 for (i=1; i<=size(id); i++) 871 { 872 is = size(id[i]); 873 s = s + is; 874 string(i) + " : " + string(is) + " : " + string(lead(id[i])); 875 } 876 "s : " + string(s); 877 } 878 -
Singular/Makefile.in
rb0bcea r55b8ae 100 100 pcv.cc kbuckets.cc prProcs.cc \ 101 101 mpr_inout.cc mpr_base.cc mpr_numeric.cc \ 102 prCopy.cc p_Procs.cc 102 prCopy.cc p_Procs.cc p_Mult_q.cc 103 103 104 104 … … 112 112 grammar.y scanner.l libparse.l syz2.cc \ 113 113 p_Delete__Template.cc p_ShallowCopyDelete__Template.cc \ 114 p_Copy__Template.cc p_Mult_n__Template.cc p_Mult_m__Template.cc \ 115 p_Minus_m_Mult_q__Template.cc p_Add_q__Template.cc 114 p_Copy__Template.cc p_Mult_nn__Template.cc pp_Mult_nn__Template.cc \ 115 pp_Mult_mm__Template.cc p_Mult_mm__Template.cc \ 116 p_Minus_mm_Mult_qq__Template.cc p_Add_q__Template.cc \ 117 p_Neg__Template.cc p_ReverseNeg__Template.cc \ 118 pInline.cc p_Inline.cc 116 119 117 120 -
Singular/p_Procs.cc
rb0bcea r55b8ae 7 7 * Author: obachman (Olaf Bachmann) 8 8 * Created: 8/00 9 * Version: $Id: p_Procs.cc,v 1. 2 2000-08-24 15:31:22obachman Exp $9 * Version: $Id: p_Procs.cc,v 1.3 2000-08-29 14:10:27 obachman Exp $ 10 10 *******************************************************************/ 11 11 #include "mod2.h" … … 42 42 // 3 -- plus Field*_Length*_OrdGeneral procs 43 43 // 4 -- all Field*_Length*_Ord* procs 44 const int HAVE_FAST_P_PROCS = 2;44 const int HAVE_FAST_P_PROCS = 0; 45 45 46 46 // Set HAVE_FAST_FIELD to: … … 56 56 // 3 -- special cases for length <= 4 57 57 // 4 -- special cases for length <= 8 58 const int HAVE_FAST_LENGTH = 3;58 const int HAVE_FAST_LENGTH = 8; 59 59 60 60 // Set HAVE_FAST_ORD to: … … 72 72 // 1 -- only ZeroOrds for OrdPosNomogPosZero, OrdNomogPosZero, OrdPomogNegZero 73 73 // 2 -- ZeroOrds for all 74 const int HAVE_FAST_ZERO_ORD = 1;74 const int HAVE_FAST_ZERO_ORD = 2; 75 75 76 76 // Predicate which returns true if alloc/copy/free of numbers is … … 165 165 p_Delete_Proc, 166 166 p_ShallowCopyDelete_Proc, 167 p_Mult_n_Proc, 168 p_Mult_m_Proc, 167 p_Mult_nn_Proc, 168 pp_Mult_nn_Proc, 169 pp_Mult_mm_Proc, 170 p_Mult_mm_Proc, 169 171 p_Add_q_Proc, 170 p_Minus_m_Mult_q_Proc, 172 p_Minus_mm_Mult_qq_Proc, 173 p_ReverseNeg_Proc, 174 p_Neg_Proc, 171 175 p_Unknown_Proc 172 176 }; … … 250 254 case p_Delete_Proc: return "p_Delete_Proc"; 251 255 case p_ShallowCopyDelete_Proc: return "p_ShallowCopyDelete_Proc"; 252 case p_Mult_n_Proc: return "p_Mult_n_Proc"; 253 case p_Mult_m_Proc: return "p_Mult_m_Proc"; 256 case p_Mult_nn_Proc: return "p_Mult_nn_Proc"; 257 case pp_Mult_nn_Proc: return "pp_Mult_nn_Proc"; 258 case pp_Mult_mm_Proc: return "pp_Mult_mm_Proc"; 259 case p_Mult_mm_Proc: return "p_Mult_mm_Proc"; 254 260 case p_Add_q_Proc: return "p_Add_q_Proc"; 255 case p_Minus_m_Mult_q_Proc: return "p_Minus_m_Mult_q_Proc"; 261 case p_Minus_mm_Mult_qq_Proc: return "p_Minus_mm_Mult_qq_Proc"; 262 case p_ReverseNeg_Proc: return "p_ReverseNeg_Proc"; 263 case p_Neg_Proc: return "p_Neg_Proc"; 256 264 case p_Unknown_Proc: return "p_Unknown_Proc"; 257 265 } … … 454 462 { 455 463 case p_Delete_Proc: 456 case p_Mult_n_Proc: 464 case p_Mult_nn_Proc: 465 case p_ReverseNeg_Proc: 466 case p_Neg_Proc: 457 467 return field; 458 468 … … 461 471 462 472 case p_Copy_Proc: 463 case p_Mult_m_Proc: 473 case pp_Mult_mm_Proc: 474 case p_Mult_mm_Proc: 475 case pp_Mult_nn_Proc: 464 476 return index(field, length); 465 477 466 478 case p_Add_q_Proc: 467 case p_Minus_m _Mult_q_Proc:479 case p_Minus_mm_Mult_qq_Proc: 468 480 return index(field, length, ord); 469 481 … … 618 630 (p_Procs->p_Delete != NULL) && 619 631 (p_Procs->p_ShallowCopyDelete != NULL) && 620 (p_Procs->p_Mult_n != NULL) && 632 (p_Procs->p_Mult_nn != NULL) && 633 (p_Procs->pp_Mult_nn != NULL) && 621 634 (p_Procs->p_Copy != NULL) && 622 (p_Procs->p_Mult_m != NULL) && 635 (p_Procs->pp_Mult_mm != NULL) && 636 (p_Procs->p_Mult_mm != NULL) && 623 637 (p_Procs->p_Add_q != NULL) && 624 (p_Procs->p_Minus_m_Mult_q != NULL)); 638 (p_Procs->p_ReverseNeg != NULL) && 639 (p_Procs->p_Neg != NULL) && 640 (p_Procs->p_Minus_mm_Mult_qq != NULL)); 625 641 } 626 642 … … 685 701 686 702 const char* macros_length[] = 687 {"p_MemCopy", "p_MemAdd", NULL};703 {"p_MemCopy", "p_MemAdd", "p_MemIncr", NULL}; 688 704 689 705 const char* macros_length_ord[] = {"p_MemCmp", NULL}; … … 740 756 printf("#define DECLARE_ORDSGN(what) what\n"); 741 757 742 // define p _Mult_m, for p_Minus_m_Mult_q743 if (strcmp(s_what, "p_Minus_m _Mult_q") == 0)744 { 745 printf("#undef p _Mult_m\n");746 printf("#define p _Mult_m p_Mult_m__%s_%s_OrdGeneral\n", s_field, s_length);758 // define pp_Mult_mm, for p_Minus_mm_Mult_qq 759 if (strcmp(s_what, "p_Minus_mm_Mult_qq") == 0) 760 { 761 printf("#undef pp_Mult_mm\n"); 762 printf("#define pp_Mult_mm pp_Mult_mm__%s_%s_OrdGeneral\n", s_field, s_length); 747 763 } 748 764 printf("#undef %s\n#define %s %s\n", s_what, s_what, s_full_proc_name); 749 765 printf("#include \"%s__Template.cc\"\n", s_what); 750 printf("#undef %s\n#undef p _Mult_m\n", s_what);766 printf("#undef %s\n#undef pp_Mult_mm\n", s_what); 751 767 } 752 768 … … 870 886 p_Ord t_ord = ord; \ 871 887 p_Length t_length = length; \ 872 FastProcFilter(what##_Proc, t_field, t_length, t_ord); \888 FastProcFilter(what##_Proc, t_field, t_length, t_ord); \ 873 889 _SetProc(what, t_field, t_length, t_ord); \ 874 890 } \ 875 while (0) \891 while (0) 876 892 877 893 static void SetProcs(p_Field field, p_Length length, p_Ord ord) 878 894 { 879 895 SetProc(p_Delete, field, LengthGeneral, OrdGeneral); 880 SetProc(p_Mult_n, field, LengthGeneral, OrdGeneral); 896 SetProc(p_Mult_nn, field, LengthGeneral, OrdGeneral); 897 SetProc(pp_Mult_nn, field, length, OrdGeneral); 881 898 SetProc(p_ShallowCopyDelete, FieldGeneral, length, OrdGeneral); 882 899 SetProc(p_Copy, field, length, OrdGeneral); 883 SetProc(p_Mult_m, field, length, OrdGeneral); 900 SetProc(pp_Mult_mm, field, length, OrdGeneral); 901 SetProc(p_Mult_mm, field, length, OrdGeneral); 884 902 SetProc(p_Add_q, field, length, ord); 885 SetProc(p_Minus_m_Mult_q, field, length, ord); 886 } 887 888 889 903 SetProc(p_Minus_mm_Mult_qq, field, length, ord); 904 SetProc(p_ReverseNeg, field, LengthGeneral, OrdGeneral); 905 SetProc(p_Neg, field, LengthGeneral, OrdGeneral); 906 } 907 908 909 -
Singular/p_Procs.h
rb0bcea r55b8ae 8 8 * Author: obachman (Olaf Bachmann) 9 9 * Created: 8/00 10 * Version: $Id: p_Procs.h,v 1. 1 2000-08-24 14:42:43obachman Exp $10 * Version: $Id: p_Procs.h,v 1.2 2000-08-29 14:10:28 obachman Exp $ 11 11 *******************************************************************/ 12 12 #ifndef P_PROCS_H … … 14 14 #include "structs.h" 15 15 16 typedef poly (*p_Copy_Proc_Ptr)(poly p, ring r); 17 typedef void (*p_Delete_Proc_Ptr)(poly *p, ring r); 18 typedef poly (*p_ShallowCopyDelete_Proc_Ptr)(poly p, ring r, omBin dest_bin); 19 typedef poly (*p_Mult_n_Proc_Ptr)(poly p, number n, ring r); 20 typedef poly (*p_Mult_m_Proc_Ptr)(poly p, poly m, 21 poly spNoether, ring r); 22 typedef poly (*p_Add_q_Proc_Ptr)(poly p, poly q, int & shorter, ring r); 23 typedef poly (*p_Minus_m_Mult_q_Proc_Ptr)(poly p, poly m, poly q, 16 // define/undef P_INLINE to inline some procedures 17 #undef NO_P_INLINE 18 #if defined(NDEBUG) && !defined(NO_INLINE) 19 #define P_INLINE inline 20 #else 21 #define NO_P_INLINE 1 22 #define P_INLINE 23 #endif 24 25 26 // NOTE: the actual procedures below are not inlined, 27 // only the dispatching function call 28 29 /*------------- Allocation/Deletion ----------------------*/ 30 // returns a copy of p 31 P_INLINE poly p_Copy(poly p, const ring r = currRing); 32 // deletes *p, and sets *p to NULL 33 P_INLINE void p_Delete(poly *p, const ring r = currRing); 34 35 /*------------- comparisons ----------------------*/ 36 // returns 1 if Lm(p) > Lm(q) 37 // 0 if Lm(p) = Lm(q) 38 // -1 if Lm(p) < Lm(q) 39 // assumes p != NULL && q != NULL 40 P_INLINE int p_LmCmp(const poly p, const poly q, const ring r = currRing); 41 42 /*------------- Arithmetic operations ----------------------*/ 43 /* NOTE as a general rule that 44 pp means input is constant; p means input is destroyed */ 45 // returns -p 46 P_INLINE poly p_Neg(poly p, const ring r = currRing); 47 // returns p*n, p is const 48 P_INLINE poly pp_Mult_nn(poly p, number n, const ring r = currRing); 49 // returns p*n, destroys p 50 P_INLINE poly p_Mult_nn(poly p, number n, const ring r = currRing); 51 // returns p*m, does neither destroy p nor m 52 P_INLINE poly pp_Mult_mm(poly p, poly m, const ring r = currRing); 53 // returns p*m, destroys p, const: m 54 P_INLINE poly p_Mult_mm(poly p, poly m, const ring r = currRing); 55 // returns p+q, destroys p and q 56 P_INLINE poly p_Add_q(poly p, poly q, const ring r = currRing); 57 // return p - m*q, destroys p; const: q,m 58 P_INLINE poly p_Minus_mm_Mult_qq(poly p, poly m, poly q, const ring r = currRing); 59 // returns p*q, destroys p and q 60 P_INLINE poly p_Mult_q(poly p, poly q, const ring r = currRing); 61 // returns p*q, does neither destroy p nor q 62 P_INLINE poly pp_Mult_qq(poly p, poly q, const ring r = currRing); 63 64 /*------------- p_Proc stuff ----------------------*/ 65 typedef poly (*p_Copy_Proc_Ptr)(poly p, const ring r); 66 typedef void (*p_Delete_Proc_Ptr)(poly *p, const ring r); 67 typedef poly (*p_ShallowCopyDelete_Proc_Ptr)(poly p, const ring r, omBin_s* dest_bin); 68 typedef poly (*p_Mult_nn_Proc_Ptr)(poly p, number n, const ring r); 69 typedef poly (*pp_Mult_nn_Proc_Ptr)(poly p, number n, const ring r); 70 typedef poly (*p_Mult_mm_Proc_Ptr)(poly p, poly m, const ring r); 71 typedef poly (*pp_Mult_mm_Proc_Ptr)(poly p, poly m, 72 poly spNoether, const ring r); 73 typedef poly (*p_Add_q_Proc_Ptr)(poly p, poly q, int & shorter, const ring r); 74 typedef poly (*p_Minus_mm_Mult_qq_Proc_Ptr)(poly p, poly m, poly q, 24 75 int &shorter, poly spNoether, 25 ring r); 76 const ring r); 77 typedef poly (*p_ReverseNeg_Proc_Ptr)(poly p, const ring r); 78 typedef poly (*p_Neg_Proc_Ptr)(poly p, const ring r); 26 79 27 80 typedef struct p_Procs_s … … 30 83 p_Delete_Proc_Ptr p_Delete; 31 84 p_ShallowCopyDelete_Proc_Ptr p_ShallowCopyDelete; 32 p_Mult_n_Proc_Ptr p_Mult_n; 33 p_Mult_m_Proc_Ptr p_Mult_m; 85 p_Mult_nn_Proc_Ptr p_Mult_nn; 86 pp_Mult_nn_Proc_Ptr pp_Mult_nn; 87 pp_Mult_mm_Proc_Ptr pp_Mult_mm; 88 p_Mult_mm_Proc_Ptr p_Mult_mm; 34 89 p_Add_q_Proc_Ptr p_Add_q; 35 p_Minus_m_Mult_q_Proc_Ptr p_Minus_m_Mult_q; 90 p_Minus_mm_Mult_qq_Proc_Ptr p_Minus_mm_Mult_qq; 91 p_ReverseNeg_Proc_Ptr p_ReverseNeg; 92 p_Neg_Proc_Ptr p_Neg; 36 93 } pProcs_s; 37 94 38 // returns a copy of p39 inline poly p_Copy(poly p, ring r = currRing)40 {41 assume(r != NULL && r->p_Procs != NULL);42 return r->p_Procs->p_Copy(p, r);43 }44 45 // deletes *p, and sets *p to NULL46 inline void p_Delete(poly *p, ring r = currRing)47 {48 assume(r != NULL && r->p_Procs != NULL);49 r->p_Procs->p_Delete(p, r);50 }51 52 // returns p+q, destroys p and q53 inline poly p_Add_q(poly p, poly q, ring r = currRing)54 {55 int shorter;56 assume(r != NULL && r->p_Procs != NULL);57 return r->p_Procs->p_Add_q(p, q, shorter, r);58 }59 60 // returns p*n, destroys p61 inline poly p_Mult_n(poly p, number n, ring r = currRing)62 {63 assume(r != NULL && r->p_Procs != NULL);64 return r->p_Procs->p_Mult_n(p, n, r);65 }66 67 // returns Copy(p)*m, does neither destroy p nor m68 inline poly p_Mult_m(poly p, poly m, ring r = currRing)69 {70 assume(r != NULL && r->p_Procs != NULL);71 return r->p_Procs->p_Mult_m(p, m, NULL, r);72 }73 74 // return p - m*Copy(q), destroys p; const: p,m75 inline poly p_Minus_m_Mult_q(poly p, poly m, poly q, ring r = currRing)76 {77 int shorter;78 assume(r != NULL && r->p_Procs != NULL);79 return r->p_Procs->p_Minus_m_Mult_q(p, m, q, shorter, NULL, r);80 }81 95 82 96 void p_SetProcs(ring r, p_Procs_s* p_Procs); 83 97 #ifdef RDEBUG 84 void p_Debug_GetSpecNames(const ring r, char* &field, char* &length, char* &ord); 98 void p_Debug_GetSpecNames(const ring r, char* &field, char* &length, 99 char* &ord); 85 100 void p_Debug_GetProcNames(const ring r, p_Procs_s* p_Procs); 86 101 #endif 87 102 103 #include "p_Inline.cc" 104 88 105 #endif /* ! P_PROCS_H */ -
Singular/polys-impl.cc
rb0bcea r55b8ae 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: polys-impl.cc,v 1.4 7 2000-08-24 14:42:44obachman Exp $ */4 /* $Id: polys-impl.cc,v 1.48 2000-08-29 14:10:28 obachman Exp $ */ 5 5 6 6 /*************************************************************** … … 28 28 #include "ring.h" 29 29 #include "polys-impl.h" 30 #include "p_Procs.h" 30 31 31 32 #ifdef HAVE_SHIFTED_EXPONENTS -
Singular/polys.cc
rb0bcea r55b8ae 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: polys.cc,v 1.5 6 2000-08-24 11:21:45 SingularExp $ */4 /* $Id: polys.cc,v 1.57 2000-08-29 14:10:28 obachman Exp $ */ 5 5 6 6 /* … … 806 806 } 807 807 808 809 #ifndef HAVE_P_PROCS 808 810 /* -------------------------------------------------------- */ 809 810 811 static Exponent_t pMultT_nok; 811 812 /*2 … … 856 857 pTest(aa); 857 858 return aa; /*TRUE*/ 859 } 860 861 862 /*2 863 * update a by multiplying it with c (c will not be destroyed) 864 */ 865 void pMultN(poly a, number c) 866 { 867 number t; 868 869 while (a!=NULL) 870 { 871 t=nMult(pGetCoeff(a), c); 872 //nNormalize(t); 873 pSetCoeff(a,t); 874 pIter(a); 875 } 876 } 877 878 /*2 879 * return a copy of the poly a times the number c (a,c will not be destroyed) 880 */ 881 poly pMultCopyN(poly a, number c) 882 { 883 poly result=NULL,hp; 884 885 if (a != NULL) 886 { 887 result=pNew(); 888 pCopy2(result,a); 889 pNext(result)=NULL; 890 pGetCoeff(result)=nMult(pGetCoeff(a),c); 891 pIter(a); 892 hp=result; 893 while (a!=NULL) 894 { 895 hp=pNext(hp)=pNew(); 896 pCopy2(hp,a); 897 pSetCoeff0(hp,nMult(pGetCoeff(a), c)); 898 pIter(a); 899 } 900 pNext(hp)=NULL; 901 } 902 return result; 858 903 } 859 904 … … 930 975 } 931 976 932 /*2 933 * update a by multiplying it with c (c will not be destroyed) 934 */ 935 void pMultN(poly a, number c) 936 { 937 number t; 938 939 while (a!=NULL) 940 { 941 t=nMult(pGetCoeff(a), c); 942 //nNormalize(t); 943 pSetCoeff(a,t); 944 pIter(a); 945 } 946 } 947 948 /*2 949 * return a copy of the poly a times the number c (a,c will not be destroyed) 950 */ 951 poly pMultCopyN(poly a, number c) 952 { 953 poly result=NULL,hp; 954 955 if (a != NULL) 956 { 957 result=pNew(); 958 pCopy2(result,a); 959 pNext(result)=NULL; 960 pGetCoeff(result)=nMult(pGetCoeff(a),c); 961 pIter(a); 962 hp=result; 963 while (a!=NULL) 964 { 965 hp=pNext(hp)=pNew(); 966 pCopy2(hp,a); 967 pSetCoeff0(hp,nMult(pGetCoeff(a), c)); 968 pIter(a); 969 } 970 pNext(hp)=NULL; 971 } 972 return result; 973 } 977 #endif 974 978 975 979 /*2 -
Singular/polys.h
rb0bcea r55b8ae 4 4 * Computer Algebra System SINGULAR * 5 5 ****************************************/ 6 /* $Id: polys.h,v 1.3 3 2000-08-24 14:42:45obachman Exp $ */6 /* $Id: polys.h,v 1.34 2000-08-29 14:10:29 obachman Exp $ */ 7 7 /* 8 8 * ABSTRACT - all basic methods to manipulate polynomials 9 9 */ 10 11 // define/undef PINLINE to inlie some procedures 12 #undef NO_PINLINE 13 #if defined(NDEBUG) && !defined(NO_INLINE) 14 #define PINLINE inline 15 #else 16 #define PINLINE 17 #define NO_PINLINE 1 18 #endif 19 10 20 #include "polys-comp.h" 11 21 #include "polys-impl.h" … … 162 172 _pShallowCopyDelete(dest_heap, source_p, source_heap) 163 173 164 165 166 174 // Adds exponents of p2 to exponents of p1 167 175 // assumes that exponents >= 0 and and one Component != 0 … … 177 185 178 186 /*-------------operations on polynomials:------------*/ 179 poly pNeg(poly p);180 187 poly pSub(poly a, poly b); 181 poly pMult(poly a, poly b); 188 poly pPower(poly p, int i); 189 /* 182 190 void pMultN(poly a, number c); 183 191 poly pMultCopyN(poly a, number c); 184 poly pPower(poly p, int i); 185 192 poly pMult(poly a, poly b); 193 poly pNeg(poly p); 194 */ 186 195 187 196 // ----------------- define to enable new p_procs -----*/ … … 192 201 #define pCopy p_Copy 193 202 #define pAdd p_Add_q 203 #define pMult p_Mult_q 204 #define pNeg p_Neg 205 #define pMultN p_Mult_nn 206 #define pMultCopyN pp_Mult_nn 207 #define pMultT p_Mult_mm 194 208 #else 195 209 // deletes the whole polynomial p … … 197 211 // Returns copy of the whole polynomial 198 212 #define pCopy(p) _pCopy(currPolyBin, p) 213 void pMultN(poly a, number c); 214 poly pMultCopyN(poly a, number c); 199 215 poly pAdd(poly p1, poly p2); 216 poly pMult(poly a, poly b); 217 poly pNeg(poly p); 218 poly pMultT(poly a, poly e); 200 219 #endif 201 220 … … 323 342 324 343 /*-----------specials for spoly-computations--------------*/ 325 poly pMultT(poly a, poly e);326 344 int pDivComp(poly p, poly q); 327 345 BOOLEAN pCompareChain (poly p,poly p1,poly p2,poly lcm); … … 333 351 // tests (see polys-impl.cc ) 334 352 unsigned long pGetShortExpVector(poly p); 335 353 // reverses the monomials of p 354 PINLINE poly pReverse(poly p); 336 355 337 356 … … 353 372 #endif 354 373 #endif 374 375 #include "pInline.cc" -
Singular/polys1.cc
rb0bcea r55b8ae 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: polys1.cc,v 1.4 3 2000-08-24 14:42:45obachman Exp $ */4 /* $Id: polys1.cc,v 1.44 2000-08-29 14:10:30 obachman Exp $ */ 5 5 6 6 /* … … 137 137 138 138 #ifndef HAVE_P_PROCS 139 /*2 140 * multiply a polynomial by -1 141 */ 142 poly pNeg(poly p) 143 { 144 poly h = p; 145 while (h!=NULL) 146 { 147 pGetCoeff(h)=nNeg(pGetCoeff(h)); 148 pIter(h); 149 } 150 return p; 151 } 152 139 153 /*-------------operations on polynomials:------------*/ 140 154 /*2 … … 210 224 211 225 212 /*2213 * multiply a polynomial by -1214 */215 poly pNeg(poly p)216 {217 poly h = p;218 while (h!=NULL)219 {220 pGetCoeff(h)=nNeg(pGetCoeff(h));221 pIter(h);222 }223 return p;224 }225 226 226 227 /*2 -
Singular/prCopy.cc
rb0bcea r55b8ae 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: prCopy.cc,v 1. 3 2000-08-14 12:56:46obachman Exp $ */4 /* $Id: prCopy.cc,v 1.4 2000-08-29 14:10:30 obachman Exp $ */ 5 5 /* 6 6 * ABSTRACT - implementation of functions for Copy/Move/Delete for Polys … … 72 72 if (revert) 73 73 { 74 // there must be a bug here: consider m1->m2 74 75 while (p != NULL) 75 76 {
Note: See TracChangeset
for help on using the changeset viewer.