23 #if (AE_COMPILER==AE_MSVC) 24 #pragma warning(disable:4100) 25 #pragma warning(disable:4127) 26 #pragma warning(disable:4702) 27 #pragma warning(disable:4996) 50 _hqrndstate_owner::_hqrndstate_owner()
54 throw ap_error(
"ALGLIB: malloc error");
56 throw ap_error(
"ALGLIB: malloc error");
63 throw ap_error(
"ALGLIB: malloc error");
65 throw ap_error(
"ALGLIB: malloc error");
74 throw ap_error(
"ALGLIB: malloc error");
78 _hqrndstate_owner::~_hqrndstate_owner()
175 return *(
reinterpret_cast<double*
>(&result));
203 return *(
reinterpret_cast<ae_int_t*
>(&result));
230 return *(
reinterpret_cast<double*
>(&result));
305 return *(
reinterpret_cast<double*
>(&result));
337 return *(
reinterpret_cast<double*
>(&result));
372 return *(
reinterpret_cast<double*
>(&result));
387 throw ap_error(
"ALGLIB: malloc error");
389 throw ap_error(
"ALGLIB: malloc error");
396 throw ap_error(
"ALGLIB: malloc error");
398 throw ap_error(
"ALGLIB: malloc error");
407 throw ap_error(
"ALGLIB: malloc error");
481 s_out.reserve((
size_t)(ssize+1));
485 if( s_out.length()>(size_t)ssize )
486 throw ap_error(
"ALGLIB: serialization integrity error");
720 throw ap_error(
"Error while calling 'kdtreebuildtagged': looks like one of arguments has wrong size");
772 return *(
reinterpret_cast<ae_int_t*
>(&result));
820 return *(
reinterpret_cast<ae_int_t*
>(&result));
864 return *(
reinterpret_cast<ae_int_t*
>(&result));
912 return *(
reinterpret_cast<ae_int_t*
>(&result));
963 return *(
reinterpret_cast<ae_int_t*
>(&result));
1018 return *(
reinterpret_cast<ae_int_t*
>(&result));
1328 static ae_int_t hqrnd_hqrndmax = 2147483561;
1329 static ae_int_t hqrnd_hqrndm1 = 2147483563;
1330 static ae_int_t hqrnd_hqrndm2 = 2147483399;
1331 static ae_int_t hqrnd_hqrndmagic = 1634357784;
1336 static ae_int_t nearestneighbor_splitnodesize = 6;
1337 static ae_int_t nearestneighbor_kdtreefirstversion = 0;
1338 static void nearestneighbor_kdtreesplit(
kdtree* kdt,
1345 static void nearestneighbor_kdtreegeneratetreerec(
kdtree* kdt,
1352 static void nearestneighbor_kdtreequerynnrec(
kdtree* kdt,
1355 static void nearestneighbor_kdtreeinitbox(
kdtree* kdt,
1358 static void nearestneighbor_kdtreeallocdatasetindependent(
kdtree* kdt,
1362 static void nearestneighbor_kdtreeallocdatasetdependent(
kdtree* kdt,
1367 static void nearestneighbor_kdtreealloctemporaries(
kdtree* kdt,
1430 state->
s1 = s1%(hqrnd_hqrndm1-1)+1;
1431 state->
s2 = s2%(hqrnd_hqrndm2-1)+1;
1432 state->
magicv = hqrnd_hqrndmagic;
1450 result = (double)(hqrnd_hqrndintegerbase(state, _state)+1)/(
double)(hqrnd_hqrndmax+2);
1476 ae_assert(n>0,
"HQRNDUniformI: N<=0!", _state);
1477 maxcnt = hqrnd_hqrndmax+1;
1512 ae_assert(n/maxcnt<=maxcnt,
"HQRNDUniformI: N is too large", _state);
1515 result = a+maxcnt*
b;
1536 ae_assert(n/maxcnt+1<=maxcnt,
"HQRNDUniformI: N is too large", _state);
1542 if( b==n/maxcnt&&a>=n%maxcnt )
1546 result = a+maxcnt*
b;
1561 mx = maxcnt-maxcnt%
n;
1564 result = hqrnd_hqrndintegerbase(state, _state);
1716 ae_assert(n>0,
"HQRNDDiscrete: N<=0", _state);
1717 ae_assert(n<=x->cnt,
"HQRNDDiscrete: Length(X)<N", _state);
1753 ae_assert(n>0,
"HQRNDContinuous: N<=0", _state);
1754 ae_assert(n<=x->cnt,
"HQRNDContinuous: Length(X)<N", _state);
1788 ae_assert(state->
magicv==hqrnd_hqrndmagic,
"HQRNDIntegerBase: State is not correctly initialized!", _state);
1789 k = state->
s1/53668;
1790 state->
s1 = 40014*(state->
s1-k*53668)-k*12211;
1793 state->
s1 = state->
s1+2147483563;
1795 k = state->
s2/52774;
1796 state->
s2 = 40692*(state->
s2-k*52774)-k*3791;
1799 state->
s2 = state->
s2+2147483399;
1805 result = state->
s1-state->
s2;
1808 result = result+2147483562;
1901 ae_assert(n>=0,
"KDTreeBuild: N<0", _state);
1902 ae_assert(nx>=1,
"KDTreeBuild: NX<1", _state);
1903 ae_assert(ny>=0,
"KDTreeBuild: NY<0", _state);
1904 ae_assert(normtype>=0&&normtype<=2,
"KDTreeBuild: incorrect NormType", _state);
1906 ae_assert(xy->
cols>=nx+ny||n==0,
"KDTreeBuild: cols(X)<NX+NY", _state);
1911 for(i=0; i<=n-1; i++)
1975 ae_assert(n>=0,
"KDTreeBuildTagged: N<0", _state);
1976 ae_assert(nx>=1,
"KDTreeBuildTagged: NX<1", _state);
1977 ae_assert(ny>=0,
"KDTreeBuildTagged: NY<0", _state);
1978 ae_assert(normtype>=0&&normtype<=2,
"KDTreeBuildTagged: incorrect NormType", _state);
1979 ae_assert(xy->
rows>=n,
"KDTreeBuildTagged: rows(X)<N", _state);
1980 ae_assert(xy->
cols>=nx+ny||n==0,
"KDTreeBuildTagged: cols(X)<NX+NY", _state);
2003 nearestneighbor_kdtreeallocdatasetindependent(kdt, nx, ny, _state);
2004 nearestneighbor_kdtreeallocdatasetdependent(kdt, n, nx, ny, _state);
2009 for(i=0; i<=n-1; i++)
2021 for(i=1; i<=n-1; i++)
2023 for(j=0; j<=nx-1; j++)
2042 nearestneighbor_kdtreegeneratetreerec(kdt, &nodesoffs, &splitsoffs, 0, n, 8, _state);
2083 ae_assert(k>=1,
"KDTreeQueryKNN: K<1!", _state);
2084 ae_assert(x->
cnt>=kdt->
nx,
"KDTreeQueryKNN: Length(X)<NX!", _state);
2131 ae_assert(x->
cnt>=kdt->
nx,
"KDTreeQueryRNN: Length(X)<NX!", _state);
2163 nearestneighbor_kdtreeinitbox(kdt, x, _state);
2169 nearestneighbor_kdtreequerynnrec(kdt, 0, _state);
2179 for(i=kdt->
kcur; i>=2; i--)
2234 ae_assert(k>0,
"KDTreeQueryAKNN: incorrect K!", _state);
2236 ae_assert(x->
cnt>=kdt->
nx,
"KDTreeQueryAKNN: Length(X)<NX!", _state);
2269 nearestneighbor_kdtreeinitbox(kdt, x, _state);
2275 nearestneighbor_kdtreequerynnrec(kdt, 0, _state);
2285 for(i=kdt->
kcur; i>=2; i--)
2339 for(i=0; i<=k-1; i++)
2393 for(i=0; i<=k-1; i++)
2447 for(i=0; i<=k-1; i++)
2509 for(i=0; i<=k-1; i++)
2516 for(i=0; i<=k-1; i++)
2523 for(i=0; i<=k-1; i++)
2709 ae_assert(i1==nearestneighbor_kdtreefirstversion,
"KDTreeUnserialize: stream header corrupted", _state);
2724 nearestneighbor_kdtreealloctemporaries(tree, tree->
n, tree->
nx, tree->
ny, _state);
2734 static void nearestneighbor_kdtreesplit(
kdtree* kdt,
2750 ae_assert(kdt->
n>0,
"KDTreeSplit: internal error", _state);
2782 for(i=0; i<=2*kdt->
nx+kdt->
ny-1; i++)
2820 static void nearestneighbor_kdtreegeneratetreerec(
kdtree* kdt,
2849 ae_assert(kdt->
n>0,
"KDTreeGenerateTreeRec: internal error", _state);
2850 ae_assert(i2>i1,
"KDTreeGenerateTreeRec: internal error", _state);
2855 if( i2-i1<=maxleafsize )
2859 *nodesoffs = *nodesoffs+2;
2876 for(i=1; i<=nx-1; i++)
2889 *nodesoffs = *nodesoffs+2;
2910 for(i=0; i<=n-1; i++)
2925 cntless = cntless+1;
2929 cntgreater = cntgreater+1;
2944 nearestneighbor_kdtreegeneratetreerec(kdt, nodesoffs, splitsoffs, i1, i2, maxleafsize, _state);
2949 if( cntless>0&&cntgreater>0 )
2955 nearestneighbor_kdtreesplit(kdt, i1, i2, d, s, &i3, _state);
2974 for(i=0; i<=2*nx+ny-1; i++)
2997 for(i=0; i<=2*nx+ny-1; i++)
3018 oldoffs = *nodesoffs;
3019 *nodesoffs = *nodesoffs+nearestneighbor_splitnodesize;
3020 *splitsoffs = *splitsoffs+1;
3031 nearestneighbor_kdtreegeneratetreerec(kdt, nodesoffs, splitsoffs, i1, i3, maxleafsize, _state);
3036 nearestneighbor_kdtreegeneratetreerec(kdt, nodesoffs, splitsoffs, i3, i2, maxleafsize, _state);
3047 static void nearestneighbor_kdtreequerynnrec(
kdtree* kdt,
3070 ae_assert(kdt->
n>0,
"KDTreeQueryNNRec: internal error", _state);
3080 for(i=i1; i<=i2-1; i++)
3090 for(j=0; j<=nx-1; j++)
3097 for(j=0; j<=nx-1; j++)
3104 for(j=0; j<=nx-1; j++)
3210 childoffs = childbestoffs;
3211 updatemin = !bestisleft;
3215 updatemin = bestisleft;
3216 childoffs = childworstoffs;
3296 nearestneighbor_kdtreequerynnrec(kdt, childoffs, _state);
3325 static void nearestneighbor_kdtreeinitbox(
kdtree* kdt,
3335 ae_assert(kdt->
n>0,
"KDTreeInitBox: internal error", _state);
3343 for(i=0; i<=kdt->
nx-1; i++)
3366 for(i=0; i<=kdt->
nx-1; i++)
3389 for(i=0; i<=kdt->
nx-1; i++)
3423 static void nearestneighbor_kdtreeallocdatasetindependent(
kdtree* kdt,
3430 ae_assert(kdt->
n>0,
"KDTreeAllocDatasetIndependent: internal error", _state);
3449 static void nearestneighbor_kdtreeallocdatasetdependent(
kdtree* kdt,
3457 ae_assert(n>0,
"KDTreeAllocDatasetDependent: internal error", _state);
3478 static void nearestneighbor_kdtreealloctemporaries(
kdtree* kdt,
3486 ae_assert(n>0,
"KDTreeAllocTemporaries: internal error", _state);
struct alglib_impl::ae_state ae_state
void kdtreeserialize(ae_serializer *s, kdtree *tree, ae_state *_state)
ae_bool ae_fp_greater_eq(double v1, double v2)
kdtree & operator=(const kdtree &rhs)
void ae_serializer_init(ae_serializer *serializer)
void _hqrndstate_clear(void *_p)
void serializerealarray(ae_serializer *s, ae_vector *v, ae_int_t n, ae_state *_state)
void kdtreequeryresultsxi(kdtree *kdt, ae_matrix *x, ae_state *_state)
void kdtreequeryresultstagsi(const kdtree &kdt, integer_1d_array &tags)
ae_int_t ae_serializer_get_alloc_size(ae_serializer *serializer)
void ae_serializer_sstart_str(ae_serializer *serializer, std::string *buf)
ae_int_t kdtreequeryaknn(kdtree *kdt, ae_vector *x, ae_int_t k, ae_bool selfmatch, double eps, ae_state *_state)
void kdtreequeryresultsdistancesi(kdtree *kdt, ae_vector *r, ae_state *_state)
void kdtreequeryresultsx(const kdtree &kdt, real_2d_array &x)
double ae_fabs(double x, ae_state *state)
void kdtreebuild(const real_2d_array &xy, const ae_int_t n, const ae_int_t nx, const ae_int_t ny, const ae_int_t normtype, kdtree &kdt)
double hqrnduniformr(const hqrndstate &state)
void * ae_malloc(size_t size, ae_state *state)
void kdtreequeryresultsdistances(const kdtree &kdt, real_1d_array &r)
alglib_impl::hqrndstate * c_ptr()
double hqrndcontinuous(hqrndstate *state, ae_vector *x, ae_int_t n, ae_state *_state)
double hqrnddiscrete(hqrndstate *state, ae_vector *x, ae_int_t n, ae_state *_state)
union alglib_impl::ae_matrix::@12 ptr
void ae_frame_make(ae_state *state, ae_frame *tmp)
void hqrndnormal2(hqrndstate *state, double *x1, double *x2, ae_state *_state)
double hqrndexponential(hqrndstate *state, double lambdav, ae_state *_state)
ae_int_t hqrnduniformi(hqrndstate *state, ae_int_t n, ae_state *_state)
void kdtreequeryresultstags(const kdtree &kdt, integer_1d_array &tags)
void kdtreealloc(ae_serializer *s, kdtree *tree, ae_state *_state)
alglib_impl::kdtree * p_struct
ae_bool apservisfinitematrix(ae_matrix *x, ae_int_t m, ae_int_t n, ae_state *_state)
void kdtreebuildtagged(const real_2d_array &xy, const integer_1d_array &tags, const ae_int_t n, const ae_int_t nx, const ae_int_t ny, const ae_int_t normtype, kdtree &kdt)
void ae_serializer_ustart_str(ae_serializer *serializer, const std::string *buf)
alglib_impl::hqrndstate * p_struct
ae_int_t kdtreequeryknn(const kdtree &kdt, const real_1d_array &x, const ae_int_t k, const bool selfmatch)
alglib_impl::kdtree * c_ptr()
void serializeintegerarray(ae_serializer *s, ae_vector *v, ae_int_t n, ae_state *_state)
void ae_serializer_stop(ae_serializer *serializer)
void allocrealarray(ae_serializer *s, ae_vector *v, ae_int_t n, ae_state *_state)
void ae_state_clear(ae_state *state)
const alglib_impl::ae_matrix * c_ptr() const
ae_bool ae_fp_eq(double v1, double v2)
void kdtreequeryresultsxyi(const kdtree &kdt, real_2d_array &xy)
void kdtreequeryresultsxyi(kdtree *kdt, ae_matrix *xy, ae_state *_state)
ae_int_t getkdtreeserializationcode(ae_state *_state)
void hqrndnormal2(const hqrndstate &state, double &x1, double &x2)
void unserializerealmatrix(ae_serializer *s, ae_matrix *v, ae_state *_state)
void unserializerealarray(ae_serializer *s, ae_vector *v, ae_state *_state)
void hqrndseed(const ae_int_t s1, const ae_int_t s2, hqrndstate &state)
void allocintegerarray(ae_serializer *s, ae_vector *v, ae_int_t n, ae_state *_state)
ae_bool ae_matrix_init_copy(ae_matrix *dst, ae_matrix *src, ae_state *state, ae_bool make_automatic)
ae_bool ae_matrix_init(ae_matrix *dst, ae_int_t rows, ae_int_t cols, ae_datatype datatype, ae_state *state, ae_bool make_automatic)
void ae_matrix_destroy(ae_matrix *dst)
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
ae_bool _kdtree_init(void *_p, ae_state *_state, ae_bool make_automatic)
double hqrndexponential(const hqrndstate &state, const double lambdav)
void ae_serializer_clear(ae_serializer *serializer)
ae_int_t kdtreequeryknn(kdtree *kdt, ae_vector *x, ae_int_t k, ae_bool selfmatch, ae_state *_state)
ae_int_t kdtreequeryaknn(const kdtree &kdt, const real_1d_array &x, const ae_int_t k, const bool selfmatch, const double eps)
ae_bool _kdtree_init_copy(void *_dst, void *_src, ae_state *_state, ae_bool make_automatic)
void kdtreequeryresultsdistances(kdtree *kdt, ae_vector *r, ae_state *_state)
double hqrnduniformr(hqrndstate *state, ae_state *_state)
void kdtreequeryresultsxi(const kdtree &kdt, real_2d_array &x)
double hqrnddiscrete(const hqrndstate &state, const real_1d_array &x, const ae_int_t n)
void ae_serializer_serialize_int(ae_serializer *serializer, ae_int_t v, ae_state *state)
void kdtreeunserialize(std::string &s_in, kdtree &obj)
ae_int_t ae_randominteger(ae_int_t maxv, ae_state *state)
ae_int_t ae_v_len(ae_int_t a, ae_int_t b)
void ae_vector_destroy(ae_vector *dst)
void hqrndseed(ae_int_t s1, ae_int_t s2, hqrndstate *state, ae_state *_state)
ae_int_t hqrnduniformi(const hqrndstate &state, const ae_int_t n)
void kdtreequeryresultstags(kdtree *kdt, ae_vector *tags, ae_state *_state)
void kdtreequeryresultsdistancesi(const kdtree &kdt, real_1d_array &r)
ae_int_t kdtreequeryrnn(kdtree *kdt, ae_vector *x, double r, ae_bool selfmatch, ae_state *_state)
void ae_v_move(double *vdst, ae_int_t stride_dst, const double *vsrc, ae_int_t stride_src, ae_int_t n)
void ae_vector_clear(ae_vector *dst)
ae_bool ae_fp_less(double v1, double v2)
void kdtreequeryresultsxy(kdtree *kdt, ae_matrix *xy, ae_state *_state)
void ae_serializer_unserialize_int(ae_serializer *serializer, ae_int_t *v, ae_state *state)
ae_int_t kdtreequeryrnn(const kdtree &kdt, const real_1d_array &x, const double r, const bool selfmatch)
void tagheappushi(ae_vector *a, ae_vector *b, ae_int_t *n, double va, ae_int_t vb, ae_state *_state)
ae_bool ae_fp_neq(double v1, double v2)
ae_bool isfinitevector(ae_vector *x, ae_int_t n, ae_state *_state)
void allocrealmatrix(ae_serializer *s, ae_matrix *v, ae_int_t n0, ae_int_t n1, ae_state *_state)
ae_bool _hqrndstate_init_copy(void *_dst, void *_src, ae_state *_state, ae_bool make_automatic)
void ae_touch_ptr(void *p)
void kdtreequeryresultstagsi(kdtree *kdt, ae_vector *tags, ae_state *_state)
double ae_maxreal(double m1, double m2, ae_state *state)
void _kdtree_clear(void *_p)
ae_bool ae_vector_set_length(ae_vector *dst, ae_int_t newsize, ae_state *state)
void unserializeintegerarray(ae_serializer *s, ae_vector *v, ae_state *_state)
void hqrndrandomize(hqrndstate *state, ae_state *_state)
void kdtreeunserialize(ae_serializer *s, kdtree *tree, ae_state *_state)
double ae_log(double x, ae_state *state)
ae_bool _hqrndstate_init(void *_p, ae_state *_state, ae_bool make_automatic)
struct alglib_impl::ae_vector ae_vector
const alglib_impl::ae_vector * c_ptr() const
double ae_minreal(double m1, double m2, ae_state *state)
hqrndstate & operator=(const hqrndstate &rhs)
void _kdtree_destroy(void *_p)
void ae_state_init(ae_state *state)
double ae_sqrt(double x, ae_state *state)
void ae_assert(ae_bool cond, const char *msg, ae_state *state)
union alglib_impl::ae_vector::@11 ptr
double hqrndnormal(const hqrndstate &state)
void ae_serializer_alloc_start(ae_serializer *serializer)
const char *volatile error_msg
void hqrndunit2(hqrndstate *state, double *x, double *y, ae_state *_state)
void kdtreequeryresultsx(kdtree *kdt, ae_matrix *x, ae_state *_state)
void serializerealmatrix(ae_serializer *s, ae_matrix *v, ae_int_t n0, ae_int_t n1, ae_state *_state)
double hqrndnormal(hqrndstate *state, ae_state *_state)
void kdtreequeryresultsxy(const kdtree &kdt, real_2d_array &xy)
ae_bool ae_vector_init(ae_vector *dst, ae_int_t size, ae_datatype datatype, ae_state *state, ae_bool make_automatic)
ae_int_t ae_maxint(ae_int_t m1, ae_int_t m2, ae_state *state)
double ae_sqr(double x, ae_state *state)
void ae_serializer_alloc_entry(ae_serializer *serializer)
void hqrndrandomize(hqrndstate &state)
_hqrndstate_owner & operator=(const _hqrndstate_owner &rhs)
ae_bool ae_vector_init_copy(ae_vector *dst, ae_vector *src, ae_state *state, ae_bool make_automatic)
void kdtreeserialize(kdtree &obj, std::string &s_out)
ae_bool ae_fp_less_eq(double v1, double v2)
alglib_impl::ae_int_t ae_int_t
double hqrndcontinuous(const hqrndstate &state, const real_1d_array &x, const ae_int_t n)
void ae_frame_leave(ae_state *state)
void ae_matrix_clear(ae_matrix *dst)
ae_bool ae_fp_greater(double v1, double v2)
ae_bool ae_matrix_set_length(ae_matrix *dst, ae_int_t rows, ae_int_t cols, ae_state *state)
void tagheapreplacetopi(ae_vector *a, ae_vector *b, ae_int_t n, double va, ae_int_t vb, ae_state *_state)
void kdtreebuild(ae_matrix *xy, ae_int_t n, ae_int_t nx, ae_int_t ny, ae_int_t normtype, kdtree *kdt, ae_state *_state)
void tagheappopi(ae_vector *a, ae_vector *b, ae_int_t *n, ae_state *_state)
void hqrndunit2(const hqrndstate &state, double &x, double &y)
ae_int_t ae_minint(ae_int_t m1, ae_int_t m2, ae_state *state)
_kdtree_owner & operator=(const _kdtree_owner &rhs)
void kdtreebuildtagged(ae_matrix *xy, ae_vector *tags, ae_int_t n, ae_int_t nx, ae_int_t ny, ae_int_t normtype, kdtree *kdt, ae_state *_state)
void _hqrndstate_destroy(void *_p)