예제 #1
0
파일: tree_cs.cpp 프로젝트: goreliu/flinter
bool Tree::ParseFromHdfString(const std::string &serialized)
{
    Clear();
    if (serialized.empty()) {
        return true;
    }

    HDF *hdf;
    NEOERR *err = hdf_init(&hdf);
    if (err != STATUS_OK) {
        nerr_ignore(&err);
        return false;
    }

    err = hdf_read_string(hdf, serialized.c_str());
    if (err != STATUS_OK) {
        nerr_ignore(&err);
        hdf_destroy(&hdf);
        return false;
    }

    HDF *child = hdf_obj_child(hdf);
    if (!child) {
        hdf_destroy(&hdf);
        return false;
    }

    if (!ParseFromHdfInternal(child)) {
        hdf_destroy(&hdf);
        return false;
    }

    hdf_destroy(&hdf);
    return true;
}
예제 #2
0
파일: j_neo_util.c 프로젝트: bigclean/moc
JNIEXPORT jboolean JNICALL Java_org_clearsilver_HDF__1readString(
    JNIEnv *env, jobject objClass, jint hdf_obj_ptr, jstring j_data) {
  HDF *hdf = (HDF *)hdf_obj_ptr;
  NEOERR *err;
  const char *data;
  jboolean retval;

  data = (*env)->GetStringUTFChars(env, j_data, 0);
  err = hdf_read_string(hdf, data);
  (*env)->ReleaseStringUTFChars(env, j_data, data);
  if (err != STATUS_OK) {
    jNeoErr(env, err);
  }
  retval = (err == STATUS_OK);
  return retval;
}
예제 #3
0
파일: hdf.cpp 프로젝트: 292388900/hhvm
void Hdf::fromString(const char *input) {
  CheckNeoError(hdf_read_string(getRaw(), (char*)input));
}
예제 #4
0
파일: main.c 프로젝트: ahma88/magro
int main(int argc, char** argv)
{
	char *bugname, *rname_init, *rname_data;
	int nupdate, nburnin,niteration;
	int thin=1;
	int nchain=1;
	int nmonitor=0;
	char* monitor_list[100];
	CHAIN chain;
	int i,j;
	int ret;	
	int n;
    //SAMPLERLIST* slist = c->model->samplers;
    NODE* node;
	NODE* monitor_nodes[100];
	FILE* fp;

#if __VC
	_fullpath(bin_path, argv[0], PATH_MAX); 
#endif

	strcpy(bin_path, argv[0]);
	for( i = strlen(bin_path)-1 ; i >= 0 ; i-- )
	{
#ifdef __VC
		if( bin_path[i] == '\\' ){
#else
		if( bin_path[i] == '/' ){
#endif
			bin_path[i] = '\0';
			break;
		}
	}
	printf(bin_path);
		

	getcwd(boot_path, PATH_MAX);

	if( argc <= 3 )
	{
		printf("usage: magro [bugs_file] [iteration] [burin-in] <options>\n");
		printf("options: -init=[R-init-file]\n");
		printf("         -data=[R-data-file]\n");
		printf("         -c=[number of chains]\n");
		printf("         -m=[monitoring variable]\n");
		printf("         -thin=[thinning interval]\n");
		printf("         -codegen\n");
		printf("         -st\n");
		printf("         -v\n");
		printf("bugs_file ... the model definition file.\n");
		printf("iteration ... the number of MCMC iterations.\n");
		printf("burn-in ... the number of MCMC burn-in periods.\n");
		printf("-init ... set the initialize parameters file. \n");
		printf("-data ... set the data file.\n");
		printf("-c ... set the number of chains. if you set more than ONE, you SHOULD NOT set -st option.\n");
		printf("-st ... disable multi threading support.\n");
		printf("-codegen ... generate human readable code set.\n");
		printf("-m ... set the monitoring values. (donot set array values)\n");
		printf("-v ... set verbose mode. \n");
		exit(1);
	}

	bugname = argv[1];
	
	if( sscanf(argv[2], "%d", &niteration) != 1 )
	{
		printf("iteration count must be integer.\n");
		exit(2);
	}

	if( sscanf(argv[3], "%d", &nburnin) != 1 )
	{
		printf("burn-in count must be integer.\n");
		exit(3);
	}

	if( niteration < nburnin )
	{
		printf("itertaion[%d] muse be more than burn-in[%d]\n", niteration, nburnin);
		exit(4);
	}
	nupdate = niteration - nburnin;

	rname_data = NULL;
	rname_init = NULL;

	for( i = 1 ; i < argc ; i++ )
	{
		if( argv[i][0] == '-' )
		{
			if( strncmp(argv[i], "-init=", 6) == 0 )
			{
				rname_init = &argv[i][6];
			}
			else if( strncmp(argv[i], "-data=", 6) == 0 )
			{
				rname_data = &argv[i][6];
			}
			else if( strcmp(argv[i], "-st") == 0 )
			{
				mode_thread = 0;
			}
			else if( strcmp(argv[i], "-codegen") == 0 )
			{
				mode_codegen = 1;
			}
			else if( strcmp(argv[i], "-v") == 0 )
			{
				mode_verbose = 1;
			}
			else if( strncmp(argv[i], "-thin=", 6) == 0 )
			{
				if( sscanf(&argv[i][6], "%d", &thin) != 1 )
				{
					printf("option '-thin': value must be integer.\n");
					exit(11);
				}
				if( thin < 1 )
				{
					printf("option '-thin': value must be greater than one.\n");
					exit(12);
				}
			}
			else if( strncmp(argv[i], "-c=", 3) == 0 )
			{
				if( sscanf(&argv[i][3], "%d", &nchain) != 1 )
				{
					printf("option '-c': value must be integer.\n");
					exit(13);
				}
				if( nchain < 1 || nchain>=CHAIN_MAX)
				{
					printf("option '-c': value must be greater than 0 and less than %d.\n", CHAIN_MAX-1);
					exit(14);
				}
			}
			else if( strncmp(argv[i], "-v=", 3) == 0 )
			{
				if( sscanf(&argv[i][3], "%d", &mode_verbose) != 1 )
				{
					printf("option '-v': value must be integer.\n");
					exit(13);
				}
				if( mode_verbose < 1 )
				{
					printf("option '-v': value must be greater than one.");
					exit(14);
				}
				
			}
			else if( strncmp(argv[i], "-m=", 3) == 0 )
			{
				char* p = &argv[i][3];
				int l = strlen(p);
				char* buff = p;//GC_MALLOC(sizeof(char) * l);
				int j,k,n;
				n = 0;
				for( j = 0 ; j < l ; j++ )
				{
					if( p[j] == ',' ) n++;
				}
				nmonitor = n+1;
				n = 0;
				k = 0;
				monitor_list[n++] = p;
				for( j = 0 ; j < l ; j++ )
				{
					if( buff[j] == ',' )
					{
						buff[j] = '\0';
						monitor_list[n++] = buff+j+1;
					}
				}
				buff[l] = '\0';	
			}
		}
	}

	GC_INIT();

	chain_init(&chain, nchain);
	
	printf("reading model in %s ... ", bugname);
	ret = chain_loadmodel(&chain, bugname);
	if( ret == -1 )
	{
		printf("fail to open the file.\n");
		exit(1);
	}
	if( ret > 0 )
	{
		printf("%d errors found.\n", ret);
		exit(-1);
	}	

	if( rname_data != NULL )
	{
        printf("reading data in %s ... ", rname_data);
		ret = chain_loaddata(&chain, rname_data);
		if( ret != -1 )
        {
            if( ret > 0 )
			{
				printf("%d errors found.\n", ret);
                return -1;
            }
            printf("success\n");
        }
		else
		{
			printf("fail to open the file.\n");
			exit(1);	
		}
	}

	printf("compiling ... ");
	chain_compile(&chain);
	printf("success\n");

	if( mode_verbose > 1 )
	{
		for( i = 0 ; i < nchain ; i++ )
		{
			printf("chain #%d\n", i+1);
			printf("  number of samplers = %d\n", chain.core[i].compiler->model->samplers->count);
			printf("  number of nodes of the graph = %d\n", chain.core[i].compiler->graph->count);
		}
	}

	if( rname_init != NULL )
	{
		printf("reading parameter file in %s ... ", rname_init);
		ret = chain_loadinit(&chain, rname_init);
		if( ret == -1 ) 
		{
			printf("faile to open the file\n");
			exit(1);
		}
		if( ret > 0 )
		{
			printf("%d errors found.\n", ret);
			return -1;
		}
		printf("success\n");
	}

	chain_initialize(&chain);

	for ( j = 0 ; j < nchain ; j++ )
	{
		chain.core[j].nmonitor = nmonitor;
		for( i = 0 ; i < nmonitor ; i++ )
		{
			CHAINCORE* core = &chain.core[j];
			node = nodedic_findnode_byliteral(core->compiler->model->relations, monitor_list[i]);
			core->monitor_nodes[i] = node;
			if( node == NULL )
			{
				printf("cannot find monitoring variable named '%s'\n", monitor_list[i]);
				exit(99);
			}
		}	
	}

	if( mode_codegen == 0 )
	{
		int ind=0;

		for( i = 0 ; i < nchain ; i++ )
		{
			int monitor_size = (int)((double)nupdate-1 / thin) + 1;
			double* monitor_buff = GC_MALLOC(sizeof(double) * monitor_size * nmonitor);
//			int monitor_count = 0;
			CHAINCORE* core = &chain.core[i];
	
			core->monitor_buff = monitor_buff;
			core->monitor_counter = 0;
			core->nthin = thin;
		}

		printf("burn-in\n");
		printf("--------------------------------------------------| %d\n", nburnin);
		chain_update(&chain, nburnin, 0);
		printf("* 100%%\n");

		ind = 0;
		printf("updates\n");
		printf("--------------------------------------------------| %d\n", nupdate);
		chain_update(&chain, nupdate, 1);
		printf("* 100%%\n");

		//	printf("*** DUMP MONITORTED VALUES***\n");
		saveCODA(&chain, nmonitor, monitor_list);	
/*		
		for( j = 0 ; j < nchain ; j++ )
		{
			CHAINCORE* core = &chain.core[j];
			double* monitor_buff = core->monitor_buff;
			int monitor_count = core->monitor_counter;
			for( n = 0 ; n < nmonitor; n++ )
			{
				printf("%s:\n", monitor_list[n]);
				for( i = 0 ; i < monitor_count; i++ )
				{
					printf("%d\t%f\n", thin*i, monitor_buff[i*nmonitor+n]);
				}
			}
		}
*/
	}
	else if( mode_codegen == 1 )
	{
		DIR* dir = opendir(CODEGEN_DIRNAME);
		if( dir == NULL )
		{
#ifndef __VC
			if( mkdir(CODEGEN_DIRNAME, S_IRWXU | S_IRWXG | S_IRWXO) != 0 )
#else
			if( mkdir(CODEGEN_DIRNAME, 0) != 0 )
#endif
			{
				printf("failed to make directory named '%s'\n", CODEGEN_DIRNAME);
				exit(90);
			}
		}
		else closedir(dir);

		chdir("codegen");

		printf("writing sampler.hdf ... ");
		fp = fopen("sampler.hdf", "w");
		if( fp != NULL )
		{
			chain_savehdf(&chain, fp, monitor_list, nmonitor, nburnin, nupdate, thin);
			fclose(fp);
			printf("OK\n");

			printf("reading sampler.hdf ... ");
			fp = fopen("sampler.hdf", "r");
			if( fp != NULL )
			{
				int sz;
				char *buf;
				char* templatedir;
				char cmdbuf[1024];
				HDF* hdf;

				fseek(fp, 0, SEEK_END);
				sz = ftell(fp);
				fseek(fp, 0, SEEK_SET);
				
				buf = (char*)GC_MALLOC_ATOMIC(sz);
				fread(buf, 1, sz, fp);
				fclose(fp); 
				printf("OK\n");

				hdf_init(&hdf);
				printf("parsing hdf ... ");
				hdf_read_string(hdf, buf);
				printf("OK\n");

				templatedir = gettemplatedir();
				printf("templatedir = %s\n", templatedir);
				savesrc(templatedir, "main.c.cs", "main.c", hdf);
				savesrc(templatedir, "conf.h.cs", "conf.h", hdf);
				savesrc(templatedir, "nmath.h.cs", "nmath.h", hdf);
				savesrc(templatedir, "sampler.c.cs", "sampler.c", hdf);
				savesrc(templatedir, "sampler.h.cs", "sampler.h", hdf);
				savesrc(templatedir, "environment.c.cs", "environment.c", hdf);
				savesrc(templatedir, "environment.h.cs", "environment.h", hdf);
				
				hdf_destroy(&hdf);

#ifndef __VC
				system("gcc  main.c environment.c sampler.c -L/usr/local/lib -lnmath -I/usr/local/include -W -Wall -lm -pthread");
#else
				system("cl main.c environment.c sampler.c /FD /EHsc /MD /Gy /c /Zi /TC");
				snprintf(cmdbuf, 1024, "link main.obj environment.obj sampler.obj nmath.lib /LIBPATH:\"%s\"", bin_path);
				system(cmdbuf);
#endif
			}
		}
	}

	chain_free(&chain);
	
	return 0;
}