예제 #1
0
static SCM pg_get_row(SCM res) {
	struct pg_res *pgr;
	SCM row;
	scm_assert_smob_type(pg_res_tag, res);
	pgr = (struct pg_res *)SCM_SMOB_DATA(res);
	if (pgr->cursor >= pgr->tuples) return SCM_BOOL_F;
	row = build_row(pgr);
	pgr->cursor++;
	scm_remember_upto_here_2(res, row);
	return row;
	}
예제 #2
0
static SCM pg_each_row(SCM res, SCM func) {
	struct pg_res *pgr;
	scm_assert_smob_type(pg_res_tag, res);
	pgr = (struct pg_res *)SCM_SMOB_DATA(res);
	while (pgr->cursor < pgr->tuples) {
		scm_call_1(func, build_row(pgr));
		pgr->cursor++;
		}
	PQclear(pgr->res);
	pgr->res = NULL;
	scm_remember_upto_here_2(res, func);
	return SCM_UNSPECIFIED;
	}
예제 #3
0
builder_iface&
array_builder::operator<<(std::string& buffer) {
    if (m_reply_ready)
        return *this;

    if (not fetch_array_size(buffer))
        return *this;

    while (buffer.size() and not m_reply_ready)
        if (not build_row(buffer))
            return *this;

    return *this;
}
예제 #4
0
static SCM pg_one_row(SCM conn, SCM query) {
	struct pg_res *pgr;
	SCM res, row;
	scm_assert_smob_type(pg_conn_tag, conn);
	res = pg_exec(conn, query);
	pgr = (struct pg_res *)SCM_SMOB_DATA(res);
	if (pgr->cursor < pgr->tuples) row = build_row(pgr);
	else row = SCM_BOOL_F;
	PQclear(pgr->res);
	pgr->res = NULL;
	scm_remember_upto_here_2(res, row);
	scm_remember_upto_here_2(conn, query);
	return row;
	}
예제 #5
0
파일: largefit.c 프로젝트: FMX/gsl
int
main(int argc, char *argv[])
{
  const size_t n = 50000;   /* number of observations */
  const size_t p = 15;      /* polynomial order + 1 */
  double lambda = 0.0;      /* regularization parameter */
  gsl_vector *c_tsqr = gsl_vector_alloc(p);
  gsl_vector *c_normal = gsl_vector_alloc(p);

  if (argc > 1)
    lambda = atof(argv[1]);

  /* solve system with TSQR method */
  solve_system(gsl_multilarge_linear_tsqr, lambda, n, p, c_tsqr);

  /* solve system with Normal equations method */
  solve_system(gsl_multilarge_linear_normal, lambda, n, p, c_normal);

  /* output solutions */
  {
    gsl_vector *v = gsl_vector_alloc(p);
    double t;

    for (t = 10.0; t <= 11.0; t += 0.01)
      {
        double f_exact = func(t);
        double f_tsqr, f_normal;

        build_row(t, v);
        gsl_blas_ddot(v, c_tsqr, &f_tsqr);
        gsl_blas_ddot(v, c_normal, &f_normal);

        printf("%f %e %e %e\n", t, f_exact, f_tsqr, f_normal);
      }

    gsl_vector_free(v);
  }

  gsl_vector_free(c_tsqr);
  gsl_vector_free(c_normal);

  return 0;
}
예제 #6
0
static SCM pg_map_rows(SCM res, SCM rest) {
	struct pg_res *pgr;
	SCM bag, row;
	scm_assert_smob_type(pg_res_tag, res);
	bag = row = SCM_EOL;
	pgr = (struct pg_res *)SCM_SMOB_DATA(res);
	while (pgr->cursor < pgr->tuples) {
		row = build_row(pgr);
		if (!scm_is_null(rest))
			bag = scm_cons(scm_call_1(SCM_CAR(rest), row), bag);
		else bag = scm_cons(row, bag);
		pgr->cursor++;
		}
	PQclear(pgr->res);
	pgr->res = NULL;
	bag = scm_reverse(bag);
	scm_remember_upto_here_2(bag, row);
	scm_remember_upto_here_2(res, rest);
	return bag;
	}
      TEST_F(TestObSSTableBlockBuilder, test_add_many_rows_to_one_block)
      {
        ObSSTableBlockBuilder block_builder;
        block_builder.set_table_id(1000);
        block_builder.set_column_group_id(2);
        const char *block_buf = NULL;
        const char *index_buf = NULL;
        ObSSTableRow row;
        int i = 0;
        int ret;

        ret = block_builder.init();
        EXPECT_TRUE(OB_SUCCESS == ret);

        while (true)
        {
          if (i > 10000)
          {
            break;
          }
          build_row(i, row);
          ret = block_builder.add_row(row);
          if (ret == OB_SUCCESS)
          {
            i++;
            EXPECT_EQ(i, block_builder.get_row_count());
          }
          else 
          {
            block_buf = block_builder.block_buf();
            index_buf = block_builder.row_index_buf();
    
            EXPECT_TRUE(block_builder.get_block_data_size() > 0);
            EXPECT_TRUE(block_builder.get_row_index_size() > 0);

            ret = block_builder.ensure_space(row.get_serialize_size());
            EXPECT_TRUE(ret == OB_SUCCESS);
            break;
          }
        }
      }
      TEST_F(TestObSSTableBlockBuilder, test_add_many_rows_to_blocks)
      {
        ObSSTableBlockBuilder block_builder;
        block_builder.set_table_id(1000);
        block_builder.set_column_group_id(2);
        ObSSTableRow row;
        int block_count = 0;
        int i = 0;
        int ret;

        ret = block_builder.init();
        EXPECT_TRUE(OB_SUCCESS == ret);

        while (true)
        {
          build_row(i, row);
          ret = block_builder.add_row(row);
          EXPECT_TRUE(ret == OB_SUCCESS);

          i++;
          EXPECT_EQ(i, block_builder.get_row_count());

          if (block_builder.get_block_size() 
              >= ObSSTableBlockBuilder::SSTABLE_BLOCK_SIZE / 4)
          {
            block_count++;
            EXPECT_TRUE(block_builder.ensure_space(4) == OB_SUCCESS);
            block_builder.reset();
            block_builder.set_table_id(1000);
            block_builder.set_column_group_id(2);
            EXPECT_EQ(0, block_builder.get_row_count());
            i = 0;
            if (block_count > 10)
            {
              break;
            }
          }   
        }
      }
예제 #9
0
int cal_main(int argc, char **argv)
{
	struct tm *local_time;
	struct tm zero_tm;
	time_t now;
	unsigned month, year, flags, i;
	char *month_names[12];
	char day_headings[28];	/* 28 for julian, 21 for nonjulian */
	char buf[40];

	flags = getopt32(argv, "jy");
	/* This sets julian = flags & 1: */
	option_mask32 &= 1;
	month = 0;
	argv += optind;
	argc -= optind;

	if (argc > 2) {
		bb_show_usage();
	}

	if (!argc) {
		time(&now);
		local_time = localtime(&now);
		year = local_time->tm_year + 1900;
		if (!(flags & 2)) { /* no -y */
			month = local_time->tm_mon + 1;
		}
	} else {
		if (argc == 2) {
			month = xatou_range(*argv++, 1, 12);
		}
		year = xatou_range(*argv, 1, 9999);
	}

	blank_string(day_headings, sizeof(day_headings) - 7 + 7*julian);

	i = 0;
	do {
		zero_tm.tm_mon = i;
		strftime(buf, sizeof(buf), "%B", &zero_tm);
		month_names[i] = xstrdup(buf);

		if (i < 7) {
			zero_tm.tm_wday = i;
			strftime(buf, sizeof(buf), "%a", &zero_tm);
			strncpy(day_headings + i * (3+julian) + julian, buf, 2);
		}
	} while (++i < 12);

	if (month) {
		unsigned row, len, days[MAXDAYS];
		unsigned *dp = days;
		char lineout[30];

		day_array(month, year, dp);
		len = sprintf(lineout, "%s %d", month_names[month - 1], year);
		printf("%*s%s\n%s\n",
			   ((7*julian + WEEK_LEN) - len) / 2, "",
			   lineout, day_headings);
		for (row = 0; row < 6; row++) {
			build_row(lineout, dp)[0] = '\0';
			dp += 7;
			trim_trailing_spaces_and_print(lineout);
		}
	} else {
		unsigned row, which_cal, week_len, days[12][MAXDAYS];
		unsigned *dp;
		char lineout[80];

		sprintf(lineout, "%d", year);
		center(lineout,
			   (WEEK_LEN * 3 + HEAD_SEP * 2)
			   + julian * (J_WEEK_LEN * 2 + HEAD_SEP
						   - (WEEK_LEN * 3 + HEAD_SEP * 2)),
			   0);
		puts("\n");		/* two \n's */
		for (i = 0; i < 12; i++) {
			day_array(i + 1, year, days[i]);
		}
		blank_string(lineout, sizeof(lineout));
		week_len = WEEK_LEN + julian * (J_WEEK_LEN - WEEK_LEN);
		for (month = 0; month < 12; month += 3-julian) {
			center(month_names[month], week_len, HEAD_SEP);
			if (!julian) {
				center(month_names[month + 1], week_len, HEAD_SEP);
			}
			center(month_names[month + 2 - julian], week_len, 0);
			printf("\n%s%*s%s", day_headings, HEAD_SEP, "", day_headings);
			if (!julian) {
				printf("%*s%s", HEAD_SEP, "", day_headings);
			}
			bb_putchar('\n');
			for (row = 0; row < (6*7); row += 7) {
				for (which_cal = 0; which_cal < 3-julian; which_cal++) {
					dp = days[month + which_cal] + row;
					build_row(lineout + which_cal * (week_len + 2), dp);
				}
				/* blank_string took care of nul termination. */
				trim_trailing_spaces_and_print(lineout);
			}
		}
	}

	fflush_stdout_and_exit(EXIT_SUCCESS);
}
예제 #10
0
파일: largefit.c 프로젝트: FMX/gsl
int
solve_system(const gsl_multilarge_linear_type * T,
             const double lambda, const size_t n, const size_t p,
             gsl_vector * c)
{
  const size_t nblock = 5;         /* number of blocks to accumulate */
  const size_t nrows = n / nblock; /* number of rows per block */
  gsl_multilarge_linear_workspace * w =
    gsl_multilarge_linear_alloc(T, p);
  gsl_matrix *X = gsl_matrix_alloc(nrows, p);
  gsl_vector *y = gsl_vector_alloc(nrows);
  gsl_rng *r = gsl_rng_alloc(gsl_rng_default);
  size_t rowidx = 0;
  double rnorm, snorm, rcond;
  double t = 10.0;
  double dt = 1.0 / (n - 1.0);

  while (rowidx < n)
    {
      size_t nleft = n - rowidx;         /* number of rows left to accumulate */
      size_t nr = GSL_MIN(nrows, nleft); /* number of rows in this block */
      gsl_matrix_view Xv = gsl_matrix_submatrix(X, 0, 0, nr, p);
      gsl_vector_view yv = gsl_vector_subvector(y, 0, nr);
      size_t i;

      /* build (X,y) block with 'nr' rows */
      for (i = 0; i < nr; ++i)
        {
          gsl_vector_view row = gsl_matrix_row(&Xv.matrix, i);
          double yi = func(t);
          double ei = gsl_ran_gaussian (r, 0.3 * yi); /* noise */

          /* construct this row of LS matrix */
          build_row(t, &row.vector);

          /* set right hand side value with added noise */
          gsl_vector_set(&yv.vector, i, yi + ei);

          t += dt;
        }

      /* accumulate (X,y) block into LS system */
      gsl_multilarge_linear_accumulate(&Xv.matrix, &yv.vector, w);

      rowidx += nr;
    }

  /* solve large LS system and store solution in c */
  gsl_multilarge_linear_solve(lambda, c, &rnorm, &snorm, w);

  /* compute reciprocal condition number */
  gsl_multilarge_linear_rcond(&rcond, w);

  fprintf(stderr, "=== Method %s ===\n", gsl_multilarge_linear_name(w));
  if (rcond != 0.0)
    fprintf(stderr, "matrix condition number = %e\n", 1.0 / rcond);
  fprintf(stderr, "residual norm  = %e\n", rnorm);
  fprintf(stderr, "solution norm  = %e\n", snorm);

  gsl_matrix_free(X);
  gsl_vector_free(y);
  gsl_multilarge_linear_free(w);
  gsl_rng_free(r);

  return 0;
}