1import c3py # import the python interface to the c3 library 2import numpy as np 3 4## Define two functions 5def func1(x,param=None): 6 return np.sum(x,axis=1) 7 8def func2(x,param=None): 9 return np.sum(x**2,axis=1) 10 11DIM = 10 # number of features 12NDATA = 100 # number of data points 13X = np.random.rand(NDATA,DIM)*2.0-1.0 # training samples 14Y = func1(X) # function values 15 16LB = -1 # lower bounds of features 17UB = 1 # upper bounds of features 18NPARAM = 2 # number of parameters per univariate function 19 20 21# This should output an equal amount of allocates and trues 22def build_ft_adapt(dim): 23 ft = c3py.FunctionTrain(dim) 24 for ii in range(dim): 25 ft.set_dim_opts(ii, "legendre", LB, UB, NPARAM) 26 verbose = 0 27 init_rank = 2 28 adapt = 0 29 ft.build_approximation(func1, None, init_rank, verbose, adapt) 30 return ft 31 32def build_ft_regress(dim): 33 ft = c3py.FunctionTrain(dim) 34 for ii in range(dim): 35 ft.set_dim_opts(ii, "legendre", LB, UB, NPARAM) 36 37 ranks = [5]*(DIM+1) 38 ranks[0] = 1 39 ranks[DIM] = 1 40 ft.set_ranks(ranks) 41 verbose = 0 42 adaptrank = 1 43 ft.build_data_model(NDATA, X, Y, 44 alg="AIO", obj="LS", adaptrank=adaptrank, 45 kickrank=1, roundtol=1e-10, verbose=verbose) 46 return ft 47 48ft_adapt = build_ft_adapt(DIM) 49ft_regress = build_ft_regress(DIM) 50ft_diff = ft_adapt - ft_regress 51 52for ii in range(100): 53 pt = np.random.rand(DIM)*2.0-1.0 54 diff_eval = ft_diff.eval(pt) 55 adapt_eval = ft_adapt.eval(pt) 56 regress_eval = ft_regress.eval(pt) 57 print("adapt_eval, regress_eval, diff_eval ", adapt_eval, regress_eval, diff_eval) 58 # assert np.abs(diff_eval) < 1e-3 59 60print("\n\n\n") 61print("Tests Passed!") 62print("Bye!") 63