Changeset e4ac9d in git


Ignore:
Timestamp:
Sep 7, 2016, 6:16:35 PM (7 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', 'a657104b677b4c461d018cbf3204d72d34ad66a9')
Children:
bebd5a0361ed499fa0769cad9424e1bb193acd7c
Parents:
e1ccd6716e34657f35d7ef3c0a08f29295742d935600a4f5be2705b151d6d42fac572d137ff0924b
Message:
Merge branch 'spielwiese' of github.com:Singular/Sources into spielwiese
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • Singular/LIB/modular.lib

    re1ccd67 re4ac9d  
    4040";
    4141
     42LIB "general.lib";
    4243LIB "resources.lib";
    4344LIB "tasks.lib";
     
    157158        // delete unlucky primes
    158159        indices = deleteUnluckyPrimes(modresults);
     160        indices = sort(indices)[1];
     161        for (i = size(indices); i > 1; i--) {
     162            if (indices[i] == indices[i-1]) {
     163                indices = delete(indices, i);
     164            }
     165        }
    159166        for (i = size(indices); i > 0; i--) {
    160167            modresults = delete(modresults, indices[i]);
     
    164171        // lift result
    165172        if (N == 1) {
    166             result_lift = chinrem(modresults, primes);
     173            result_lift = chinrem_recursive(modresults, primes);
    167174        }
    168175        else {
    169             result_lift = chinrem(list(result_lift)+modresults,
     176            result_lift = chinrem_recursive(list(result_lift)+modresults,
    170177                list(N)+primes);
    171178        }
     
    211218    ideal I = x9y2+x10, x2y7-y8;
    212219    modular("std", list(I));
     220}
     221
     222static proc chinrem_recursive(list modresults, list moduli)
     223{
     224    if (typeof(modresults[1]) != "list") {
     225        return(chinrem(modresults, moduli));
     226    }
     227    // if typeof(modresults[1]) == "list", then we assume
     228    // size(modresults[1]) == size(modresults[k])
     229    // for k = 2, ..., size(modresults)
     230    int n_sublists = size(modresults[1]);
     231    int i, j;
     232    list modresults_sublists;
     233    for (j = n_sublists; j > 0; j--) {
     234        modresults_sublists[j] = list();
     235        for (i = size(modresults); i > 0; i--) {
     236            modresults_sublists[j][i] = modresults[i][j];
     237        }
     238        task t(j) = "Modular::chinrem_recursive",
     239            list(modresults_sublists[j], moduli);
     240    }
     241    startTasks(t(1..n_sublists));
     242    waitAllTasks(t(1..n_sublists));
     243    list result;
     244    for (j = n_sublists; j > 0; j--) {
     245        result[j] = getResult(t(j));
     246        killTask(t(j));
     247    }
     248    return(result);
    213249}
    214250
     
    290326{
    291327    arg_type = typeof(farey_arg);
    292     if (arg_type != "bigint" && arg_type != "ideal"
    293         && arg_type != "module" && arg_type != "matrix") {
     328    if (arg_type != "bigint" && arg_type != "ideal" && arg_type != "module"
     329        && arg_type != "matrix" && arg_type != "list") {
    294330        ERROR("wrong input type");
     331    }
     332    int i;
     333    if (arg_type == "list") {
     334        int size_farey_arg = size(farey_arg);
     335        for (i = size_farey_arg; i > 0; i--) {
     336            task t(i) = "Modular::farey_parallel", list(farey_arg[i], farey_N);
     337        }
     338        startTasks(t(1..size_farey_arg));
     339        waitAllTasks(t(1..size_farey_arg));
     340        list result;
     341        for (i = size_farey_arg; i > 0; i--) {
     342            result[i] = getResult(t(i));
     343            killTask(t(i));
     344        }
     345        return(result);
    295346    }
    296347    if (arg_type == "bigint" || arg_type == "matrix") {
     
    302353    int chunks = par_range(size_arg);
    303354    intvec range;
    304     int i;
    305355    for (i = chunks; i > 0; i--) {
    306356        range = par_range(size_arg, i);
  • kernel/GBEngine/kInline.h

    r5600a4 re4ac9d  
    739739}
    740740
    741 KINLINE poly sLObject::CopyGetP()
    742 {
    743   if (bucket != NULL)
    744   {
    745     int i = kBucketCanonicalize(bucket);
    746     poly bp = p_Copy(bucket->buckets[i], tailRing);
    747     pLength = bucket->buckets_length[i] + 1;
    748     if (bp != NULL)
    749     {
    750       assume(t_p != NULL || p != NULL);
    751       if (t_p != NULL) pNext(t_p) = bp;
    752       else pNext(p) = bp;
    753     }
    754     bucket = NULL;
    755   }
    756   return sLObject::GetP();
    757 }
    758 
    759 
    760741KINLINE long sLObject::pLDeg()
    761742{
  • kernel/GBEngine/kutil.h

    r5600a4 re4ac9d  
    230230  // makes a copy of the poly of L
    231231  KINLINE void Copy();
    232   // gets the poly and makes a copy of it
    233   KINLINE poly CopyGetP();
    234232
    235233  KINLINE int GetpLength();
Note: See TracChangeset for help on using the changeset viewer.