Пример #1
0
grammar *
getgrammar(char *filename)
{
    FILE *fp;
    node *n;
    grammar *g0, *g;
    perrdetail err;

    fp = fopen(filename, "r");
    if (fp == NULL) {
        perror(filename);
        Py_Exit(1);
    }
    g0 = meta_grammar();
    n = PyParser_ParseFile(fp, filename, g0, g0->g_start,
                  (char *)NULL, (char *)NULL, &err);
    fclose(fp);
    if (n == NULL) {
        fprintf(stderr, "Parsing error %d, line %d.\n",
            err.error, err.lineno);
        if (err.text != NULL) {
            size_t len;
            int i;
            fprintf(stderr, "%s", err.text);
            len = strlen(err.text);
            if (len == 0 || err.text[len-1] != '\n')
                fprintf(stderr, "\n");
            for (i = 0; i < err.offset; i++) {
                if (err.text[i] == '\t')
                    putc('\t', stderr);
                else
                    putc(' ', stderr);
            }
            fprintf(stderr, "^\n");
            PyObject_FREE(err.text);
        }
        Py_Exit(1);
    }
    g = pgen(n);
    PyNode_Free(n);
    if (g == NULL) {
        printf("Bad grammar.\n");
        Py_Exit(1);
    }
    return g;
}
Пример #2
0
void PottsSim(struct parameters params, std::string filename, const int & id, std::string mode){

    std::chrono::high_resolution_clock::time_point t1;
    std::chrono::high_resolution_clock::time_point t2;
    std::string strategy;
    std::ofstream ofile;
    ofile.open(filename, std::ios::app);

    // if(mode == "auto"){
    //     if( ((__fpv)params.N / params.C < 1.7) && (params.N > 1500) ){
    //         strategy = "hc";
    //     }else{
    //         strategy = "lc";
    //     }
    // }


    t1 = std::chrono::high_resolution_clock::now();
    //Random seed init
    std::default_random_engine generator;
    //generator.seed(12345);

    /***************************************************************************
    INITIALIZATION
    ***************************************************************************/
    PatternGen pgen(
               params.N, //N
               params.p, //p
               params.S, //S
               params.a, //a
               params.beta, //beta
               params.N_fact, //N_fact
               params.Num_fact, //Num_fact
               params.a_fact, //a_fact
               params.eps, //eps
               params.a_pf, //a_pf
               params.fact_eigen_slope //fact_eigen_slope
               );

    pgen.generate();
    //Create the network
    //generator.seed(12345);


    LC_PNet pnet(params.N,
                params.C,
                params.S
                    );

    //Connect units
    pnet.connect_units(generator);
    pnet.init_network(params.beta,params.U,params.p,params.a,pgen.get_patt());

    /***************************************************************************
    DYNAMICS
    ***************************************************************************/
    std::cout << "STARTING DYNAMICS" << std::endl;
    //Start the dynamics
    t1 = std::chrono::high_resolution_clock::now();
    pnet.start_dynamics(generator,
                        params.p,
                        params.tstatus, //tstatus (tempostampa)
                        params.nupdates,  //Number of updates
                        pgen.get_patt(),
                        0, //Pattern number
                        params.a,
                        params.U,
                        params.w,
                        params.g,
                        params.tau * params.N, //tau
                        params.b1, //b1
                        params.b2, //b2
                        params.b3, //b3
                        params.beta, //beta
                        500*params.N //tx (n0)
                        );

    t2 = std::chrono::high_resolution_clock::now();

    //Save all the data needed in a file
    auto duration = std::chrono::duration_cast<std::chrono::milliseconds>( t2 - t1 ).count();
    std::cout << "DURATION: " << duration << std::endl;
    ofile << "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"<< std::endl;
    ofile << std::setw(30) << std::left << "SIM #" << id << std::endl;
    ofile << "---------------------------------------------------------------------------------"<< std::endl;
    ofile << std::setw(30) << std::left << "SIM ELAPSED TIME(ms): "<< duration << std::endl;
    ofile << "---------------------------------------------------------------------------------"<< std::endl;
    ofile << std::setw(30) << std::left << "LATCHING LENGTH: "<< pnet.latching_length << std::endl;
    ofile << "//////////////////////////////////////////////////////////////////////////////////"<< std::endl;



    ofile.close();
}
Пример #3
0
grammar *
Py_pgen(node *n)
{
  return pgen(n);
}