Пример #1
0
Файл: ocode.c Проект: pcpa/owl
static void
eval_root(void)
{
    oast_t		*ast;
    oword_t		 offset;
    orecord_t		*record;
    ofunction_t		*function;

    assert(current_record == root_record);
    assert(current_function == root_record->function);
    oeval_ast(root_record->function->ast->c.ast);
    odata(root_record->function->ast->c.ast);

    for (offset = type_vector->offset - 1; offset > t_root; --offset) {
	record = type_vector->v.ptr[offset];
	if (otype(record) == t_prototype &&
	    likely(record->function && ofunction_p(record->function))) {
	    function = record->function;
	    current_record = record;
	    current_function = function;
	    /* Error later if function is actually called but never defined */
	    if ((ast = function->ast)) {
		oeval_ast(ast->l.ast);
		eval_ast_declexpr(ast->r.ast->r.ast);
		oeval_ast(ast->c.ast);
		odata(function->ast->c.ast);
	    }
	}
    }
    current_function = root_record->function;
    current_record = root_record;
}
Пример #2
0
////////////////////////////////////////////////////////////////////////////////
// Test boost::simd::output_iterator behavior with std::vector
////////////////////////////////////////////////////////////////////////////////
NT2_TEST_CASE_TPL(simd_vector_output_iterator, BOOST_SIMD_SIMD_TYPES )
{
  typedef typename boost::simd::output_iterator<T> oit_;
  typedef typename boost::simd::input_iterator<T>  iit_;
  typedef typename boost::simd::pack<T> p_t;
  static const std::size_t card = boost::simd::meta::cardinal_of<p_t>::value;
  //  static const std::size_t at_ = card - 1;

  std::vector<T, boost::simd::memory::allocator<T> > idata(3*card);
  std::vector<T, boost::simd::memory::allocator<T> > odata(3*card);

  for(int i=0; i<3*card; ++i) idata[i] = i;

  oit_ obegin = boost::simd::output_begin(odata.begin());
  oit_ oend   = boost::simd::output_end(odata.end());
  iit_ ibegin = boost::simd::input_begin(idata.begin());
  iit_ iend   = boost::simd::input_end(idata.end());  
  
  for(; obegin != oend; ++obegin) *obegin = *ibegin++;

  iit_ rbegin = boost::simd::input_begin(&odata[0]);
  iit_ rend   = boost::simd::input_end(&odata[0]+3*card);  

  for(int c = 0; rbegin != rend; ++rbegin, c++)
  {
    for(int i=0;i<card;++i)
     NT2_TEST_EQUAL( (*rbegin)[i], idata[i + c*card]);
  }
}
Пример #3
0
void encode(const std::vector<boost::shared_ptr<std::vector<double> > >& input,
    const Model& model, std::vector<boost::shared_ptr<std::vector<double> > >& output)
{
  assert(input.size());

  const size_t rows = input.size(), cols = input[0]->size();

  assert(cols == (size_t)model.getModel()->high_dim());

  const int lowdim = model.getModel()->low_dim();

  std::vector<double> idata(rows * cols);
  std::vector<double> odata(rows * lowdim);

  for (size_t i = 0; i < input.size(); ++i) {
    std::copy(input[i]->begin(), input[i]->end(), idata.begin() + cols * i);
  }

  YA_WRAP_RM(double) input_w(&idata[0], rows, cols);
  YA_WRAP_RM(double) output_w(&odata[0], rows, lowdim);

  model.getModel()->forward_t(input_w, output_w);

  output.clear();
  for (size_t i = 0; i < rows; ++i) {
    output.push_back(boost::make_shared<std::vector<double> >(odata.begin() + i * lowdim, odata.begin() + (i+1) * lowdim));
  }
}
Пример #4
0
// ---
tERROR pr_call _MemoryRealloc( tPO* po, tHANDLE* handle, tDWORD size ) {

  tOBJECT* obj;
  tERROR   error;
  PR_TRACE_A0( MakeObject(handle), "Enter _MemoryRealloc" );

  if ( handle->obj == NULL ) {  // alloc new memory
		error = PrAlloc( (tPTR*)&obj, sizeof(tOBJECT) + size );
    if ( PR_SUCC(error) ) {
      wlock(po);
      handle->obj = obj;
      _ObjectInit0( handle );
      wunlock(po);
    }
  }

  else {
    wlock(po);
    if ( PR_SUCC(error=PrRealloc((tPTR*)&handle->obj,handle->obj,sizeof(tOBJECT)+size)) ) {
      *odata(handle->obj) = handle->obj + 1;
    }
    wunlock(po);
  }

  PR_TRACE_A1( MakeObject(handle), "Leave _MemoryRealloc ret %terr", error );
  return error;
}
Пример #5
0
void trainModel(std::vector<boost::shared_ptr<std::vector<double> > >& input,
    DimensionalityReductionMethod method, int lowdim, int neighbors, Model& model)
{
  assert(input.size());

  const size_t rows = input.size(), cols = input[0]->size();

  std::vector<double> idata(rows * cols);
  std::vector<double> odata(rows * lowdim);

  for (size_t i = 0; i < input.size(); ++i) {
    std::copy(input[i]->begin(), input[i]->end(), idata.begin() + cols * i);
  }

  YA_WRAP_RM(double) input_w(&idata[0], rows, cols);
  YA_WRAP_RM(double) output_w(&odata[0], rows, lowdim);

  boost::shared_ptr<YADimReduce<double> > reductionMethod;

  switch(method) {
  case DimensionalityReductionMethod::PCA:
    reductionMethod = boost::make_shared<YAPCAReduce<double> >();
    break;

  case DimensionalityReductionMethod::LLE:
    reductionMethod = boost::make_shared<YALLEReduce<double> >();
    reductionMethod->neighbor_weight_mode(1);
    reductionMethod->neighbors(neighbors);
    reductionMethod->neighbor_mode(0);
    break;

  case DimensionalityReductionMethod::Isomap:
    reductionMethod = boost::make_shared<YAIsoReduce<double> >();
    reductionMethod->neighbor_weight_mode(0);
    reductionMethod->neighbors(neighbors);
    reductionMethod->neighbor_mode(0);
    break;
  }

  EigenOptions eigopts;
  reductionMethod->verbose(2);
  reductionMethod->find_t(input_w, output_w, lowdim, eigopts);

  model.setMethod(method);
  model.setModel(reductionMethod);
}
void
JPlotFitQuad2::CalculateFirstPass()
{
	JFloat Y, X, X2, YX, X3, YX2, X4, Sig;
	JFloat tempa, tempb, tempc, det;
	JSize i,j, k;
	JArray<JFloat> yAdjError;
	
	const JPlotDataBase* data = GetData();
	J2DDataPoint point;
	JSize rcount = GetRealElementCount();
	for (i=1; i<= rcount; i++)
		{
		J2DDataPoint point = GetRealElement(i);
		JFloat newVal = 1;
		if (point.yerr != 0)
			{
			newVal = point.yerr;
			}
		yAdjError.AppendElement(newVal);
		}

	JMatrix odata(rcount, 3, 1.0);
	JVector yData(rcount);
	for (i=1; i<= rcount; i++)
		{
		point = GetRealElement(i);
		JFloat yerr = yAdjError.GetElement(i);
		odata.SetElement(i, 1, 1/(yerr*yerr));
		odata.SetElement(i, 2, point.x/(yerr*yerr));
		odata.SetElement(i, 3, point.x*point.x/(yerr*yerr));
		yData.SetElement(i, point.y/(yerr*yerr));
		}
	JMatrix tData = odata.Transpose();
	JMatrix lData = tData * odata;
	JMatrix rData = tData * yData;
	JMatrix parms(3,1);
	JGaussianElimination(lData, rData, &parms);

	for (k=1; k<= 4; k++)
		{
		Y = 0;
		X = 0;
		X2 = 0;
		YX = 0;
		X3 = 0;
		YX2 = 0;
		X4 = 0;
		Sig = 0;
		for (i=1; i<= rcount; i++)
			{
			point = GetRealElement(i);
			JFloat yerr = yAdjError.GetElement(i);
			Y += point.y/(yerr*yerr);
			X += point.x/(yerr*yerr);
			X2 += point.x*point.x/(yerr*yerr);
			YX += point.y*point.x/(yerr*yerr);
			X3 += point.x*point.x*point.x/(yerr*yerr);
			YX2 += point.x*point.x*point.y/(yerr*yerr);
			X4 += point.x*point.x*point.x*point.x/(yerr*yerr);
			Sig += 1/(yerr*yerr);
			}
		JFloat cv1 = 0, cv2 = 0, cv3 = 0;
		for (i=1; i<= rcount; i++)
			{
			point = GetRealElement(i);
			JFloat syi = yAdjError.GetElement(i);
			JFloat yi = point.y;
			JFloat xi = point.x;
			for (j = 1; j <= rcount; j++)
				{
				point = GetRealElement(j);
				JFloat syj = yAdjError.GetElement(j);
				JFloat yj = point.y;
				JFloat xj = point.x;
				cv1 += xi*xj*xj*(xi*yj-yi*xj)/(syi*syi*syj*syj);
				cv2 += (xi*xj*xj*(yi - yj))/(syi*syi*syj*syj);
				cv3 += (xi*xj*xj*(xj - xi))/(syi*syi*syj*syj);
				}
			}
		det = Sig*(X2*X4-X3*X3) + X*(X3*X2-X*X4) + X2*(X*X3-X2*X2);
		tempa = (Y*(X2*X4-X3*X3) + X*(X3*YX2-YX*X4) + X2*(YX*X3-X2*YX2))/det;
		tempb = (Sig*(YX*X4-YX2*X3) + Y*(X3*X2-X*X4) + X2*(X*YX2-YX*X2))/det;
		tempc = (Sig*cv1 + X*cv2 + Y*cv3)/det;

		for (i=1; i<=rcount; i++)
			{
			J2DDataPoint point = GetRealElement(i);
			JFloat newVal = 
				sqrt(point.yerr*point.yerr + (tempb+2*tempc*point.x)*(tempb+2*tempc*point.x)*point.xerr*point.xerr);
			if (newVal == 0)
				{
				newVal = 1;
				}
			yAdjError.SetElement(i, newVal);
			}
		}
//	itsAParameter	= tempa;
//	itsBParameter	= tempb;
//	itsCParameter	= tempc;
	itsAParameter	= parms.GetElement(1, 1);
	itsBParameter	= parms.GetElement(2, 1);
	itsCParameter	= parms.GetElement(3, 1);

	itsChi2Start = 0;
	for (i=1; i<= rcount; i++)
		{
		point = GetRealElement(i);
		JFloat yerr = yAdjError.GetElement(i);
		itsChi2Start += pow(point.y - tempa - tempb*point.x - tempc*point.x*point.x,2)/(yerr*yerr);
		}

	itsAErrParameter = 0;
	itsBErrParameter = 0;
	itsCErrParameter = 0;
}
void
JPlotFitExp::CalculateFirstPass()
{
	J2DDataPoint point;
	const JSize count	= GetRealElementCount();
	JSize rcount		= 0;
	for (JIndex i = 1; i <= count; i++)
		{
		point	= GetRealElement(i);
		if (point.y > 0)
			{
			rcount++;
			}
		}
	JMatrix odata(rcount, 2, 1.0);
	JVector yData(rcount);

	rcount	= 0;
	for (JIndex i = 1; i <= count; i++)
		{
		point	= GetRealElement(i);
		if (point.y > 0)
			{
			rcount++;
			JFloat yerr = point.yerr;
			if (yerr == 0)
				{
				yerr = 1;
				}
			else
				{
				yerr	= log((point.y - point.yerr)/point.y);
				}
			odata.SetElement(rcount, 1, 1/(yerr*yerr));
			odata.SetElement(rcount, 2, log(point.x)/(yerr*yerr));
			yData.SetElement(rcount, log(point.x)/(yerr*yerr));
			}
		}

	JMatrix tData = odata.Transpose();
	JMatrix lData = tData * odata;
	JMatrix rData = tData * yData;
	JMatrix parms(2,1);
	JGaussianElimination(lData, rData, &parms);
	JVector eparms(2);
	eparms.SetElement(1, exp(parms.GetElement(1,1)));
	eparms.SetElement(2, parms.GetElement(2,1));
	SetCurrentParameters(eparms);

	itsChi2Start = 0;
	for (JIndex i = 1; i <= count; i++)
		{
//		do
//			{
			point = GetRealElement(i);
//			}
//		while (point.y == 0);
		JFloat yerr = point.yerr;
		if (yerr == 0)
			{
			yerr = 1;
			}
		itsChi2Start += pow(point.y - FunctionN(point.x),2)/(yerr*yerr);
		}

}