alglib4 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +47 -0
  3. data/ext/alglib/alglib.cpp +537 -0
  4. data/ext/alglib/alglib_array_converters.cpp +86 -0
  5. data/ext/alglib/alglib_array_converters.h +15 -0
  6. data/ext/alglib/alglib_utils.cpp +10 -0
  7. data/ext/alglib/alglib_utils.h +6 -0
  8. data/ext/alglib/alglibinternal.cpp +21749 -0
  9. data/ext/alglib/alglibinternal.h +2168 -0
  10. data/ext/alglib/alglibmisc.cpp +9106 -0
  11. data/ext/alglib/alglibmisc.h +2114 -0
  12. data/ext/alglib/ap.cpp +20094 -0
  13. data/ext/alglib/ap.h +7244 -0
  14. data/ext/alglib/dataanalysis.cpp +52588 -0
  15. data/ext/alglib/dataanalysis.h +10601 -0
  16. data/ext/alglib/diffequations.cpp +1342 -0
  17. data/ext/alglib/diffequations.h +282 -0
  18. data/ext/alglib/extconf.rb +5 -0
  19. data/ext/alglib/fasttransforms.cpp +4696 -0
  20. data/ext/alglib/fasttransforms.h +1018 -0
  21. data/ext/alglib/integration.cpp +4249 -0
  22. data/ext/alglib/integration.h +869 -0
  23. data/ext/alglib/interpolation.cpp +74502 -0
  24. data/ext/alglib/interpolation.h +12264 -0
  25. data/ext/alglib/kernels_avx2.cpp +2171 -0
  26. data/ext/alglib/kernels_avx2.h +201 -0
  27. data/ext/alglib/kernels_fma.cpp +1065 -0
  28. data/ext/alglib/kernels_fma.h +137 -0
  29. data/ext/alglib/kernels_sse2.cpp +735 -0
  30. data/ext/alglib/kernels_sse2.h +100 -0
  31. data/ext/alglib/linalg.cpp +65182 -0
  32. data/ext/alglib/linalg.h +9927 -0
  33. data/ext/alglib/optimization.cpp +135331 -0
  34. data/ext/alglib/optimization.h +19235 -0
  35. data/ext/alglib/solvers.cpp +20488 -0
  36. data/ext/alglib/solvers.h +4781 -0
  37. data/ext/alglib/specialfunctions.cpp +10672 -0
  38. data/ext/alglib/specialfunctions.h +2305 -0
  39. data/ext/alglib/statistics.cpp +19791 -0
  40. data/ext/alglib/statistics.h +1359 -0
  41. data/ext/alglib/stdafx.h +2 -0
  42. data/gpl2.txt +339 -0
  43. data/gpl3.txt +674 -0
  44. data/lib/alglib/version.rb +3 -0
  45. data/lib/alglib.rb +4 -0
  46. metadata +101 -0
@@ -0,0 +1,2114 @@
1
+ /*************************************************************************
2
+ ALGLIB 4.04.0 (source code generated 2024-12-21)
3
+ Copyright (c) Sergey Bochkanov (ALGLIB project).
4
+
5
+ >>> SOURCE LICENSE >>>
6
+ This program is free software; you can redistribute it and/or modify
7
+ it under the terms of the GNU General Public License as published by
8
+ the Free Software Foundation (www.fsf.org); either version 2 of the
9
+ License, or (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
16
+ A copy of the GNU General Public License is available at
17
+ http://www.fsf.org/licensing/licenses
18
+ >>> END OF LICENSE >>>
19
+ *************************************************************************/
20
+ #ifndef _alglibmisc_pkg_h
21
+ #define _alglibmisc_pkg_h
22
+ #include "ap.h"
23
+ #include "alglibinternal.h"
24
+
25
+ /////////////////////////////////////////////////////////////////////////
26
+ //
27
+ // THIS SECTION CONTAINS COMPUTATIONAL CORE DECLARATIONS (DATATYPES)
28
+ //
29
+ /////////////////////////////////////////////////////////////////////////
30
+ namespace alglib_impl
31
+ {
32
+ #if defined(AE_COMPILE_XDEBUG) || !defined(AE_PARTIAL_BUILD)
33
+ typedef struct
34
+ {
35
+ ae_int_t i;
36
+ ae_complex c;
37
+ ae_vector a;
38
+ } xdebugrecord1;
39
+ #endif
40
+ #if defined(AE_COMPILE_HQRND) || !defined(AE_PARTIAL_BUILD)
41
+ typedef struct
42
+ {
43
+ ae_int_t s1;
44
+ ae_int_t s2;
45
+ ae_int_t magicv;
46
+ } hqrndstate;
47
+ #endif
48
+ #if defined(AE_COMPILE_NEARESTNEIGHBOR) || !defined(AE_PARTIAL_BUILD)
49
+ typedef struct
50
+ {
51
+ ae_vector x;
52
+ ae_vector boxmin;
53
+ ae_vector boxmax;
54
+ ae_int_t kneeded;
55
+ double rneeded;
56
+ ae_bool selfmatch;
57
+ double approxf;
58
+ ae_int_t kcur;
59
+ ae_vector idx;
60
+ ae_vector r;
61
+ ae_vector buf;
62
+ ae_vector curboxmin;
63
+ ae_vector curboxmax;
64
+ double curdist;
65
+ ae_vector xqc;
66
+ } kdtreerequestbuffer;
67
+ typedef struct
68
+ {
69
+ ae_int_t n;
70
+ ae_int_t nx;
71
+ ae_int_t ny;
72
+ ae_int_t normtype;
73
+ ae_matrix xy;
74
+ ae_vector tags;
75
+ ae_vector boxmin;
76
+ ae_vector boxmax;
77
+ ae_vector nodes;
78
+ ae_vector splits;
79
+ kdtreerequestbuffer innerbuf;
80
+ ae_int_t debugcounter;
81
+ } kdtree;
82
+ #endif
83
+
84
+ }
85
+
86
+ /////////////////////////////////////////////////////////////////////////
87
+ //
88
+ // THIS SECTION CONTAINS C++ INTERFACE
89
+ //
90
+ /////////////////////////////////////////////////////////////////////////
91
+ namespace alglib
92
+ {
93
+
94
+ #if defined(AE_COMPILE_XDEBUG) || !defined(AE_PARTIAL_BUILD)
95
+ /*************************************************************************
96
+ This is a debug class intended for testing ALGLIB interface generator.
97
+ Never use it in any real life project.
98
+
99
+ -- ALGLIB --
100
+ Copyright 20.07.2021 by Bochkanov Sergey
101
+ *************************************************************************/
102
+ class _xdebugrecord1_owner
103
+ {
104
+ public:
105
+ _xdebugrecord1_owner();
106
+ _xdebugrecord1_owner(alglib_impl::xdebugrecord1 *attach_to);
107
+ _xdebugrecord1_owner(const _xdebugrecord1_owner &rhs);
108
+ _xdebugrecord1_owner& operator=(const _xdebugrecord1_owner &rhs);
109
+ virtual ~_xdebugrecord1_owner();
110
+ alglib_impl::xdebugrecord1* c_ptr();
111
+ const alglib_impl::xdebugrecord1* c_ptr() const;
112
+ protected:
113
+ alglib_impl::xdebugrecord1 *p_struct;
114
+ bool is_attached;
115
+ };
116
+ class xdebugrecord1 : public _xdebugrecord1_owner
117
+ {
118
+ public:
119
+ xdebugrecord1();
120
+ xdebugrecord1(alglib_impl::xdebugrecord1 *attach_to);
121
+ xdebugrecord1(const xdebugrecord1 &rhs);
122
+ xdebugrecord1& operator=(const xdebugrecord1 &rhs);
123
+ virtual ~xdebugrecord1();
124
+ ae_int_t &i;
125
+ alglib::complex &c;
126
+ real_1d_array a;
127
+
128
+ };
129
+ #endif
130
+
131
+ #if defined(AE_COMPILE_HQRND) || !defined(AE_PARTIAL_BUILD)
132
+ /*************************************************************************
133
+ Portable high quality random number generator state.
134
+ Initialized with HQRNDRandomize() or HQRNDSeed().
135
+
136
+ Fields:
137
+ S1, S2 - seed values
138
+ V - precomputed value
139
+ MagicV - 'magic' value used to determine whether State structure
140
+ was correctly initialized.
141
+ *************************************************************************/
142
+ class _hqrndstate_owner
143
+ {
144
+ public:
145
+ _hqrndstate_owner();
146
+ _hqrndstate_owner(alglib_impl::hqrndstate *attach_to);
147
+ _hqrndstate_owner(const _hqrndstate_owner &rhs);
148
+ _hqrndstate_owner& operator=(const _hqrndstate_owner &rhs);
149
+ virtual ~_hqrndstate_owner();
150
+ alglib_impl::hqrndstate* c_ptr();
151
+ const alglib_impl::hqrndstate* c_ptr() const;
152
+ protected:
153
+ alglib_impl::hqrndstate *p_struct;
154
+ bool is_attached;
155
+ };
156
+ class hqrndstate : public _hqrndstate_owner
157
+ {
158
+ public:
159
+ hqrndstate();
160
+ hqrndstate(alglib_impl::hqrndstate *attach_to);
161
+ hqrndstate(const hqrndstate &rhs);
162
+ hqrndstate& operator=(const hqrndstate &rhs);
163
+ virtual ~hqrndstate();
164
+
165
+ };
166
+ #endif
167
+
168
+ #if defined(AE_COMPILE_NEARESTNEIGHBOR) || !defined(AE_PARTIAL_BUILD)
169
+ /*************************************************************************
170
+ Buffer object which is used to perform nearest neighbor requests in the
171
+ multithreaded mode (multiple threads working with same KD-tree object).
172
+
173
+ This object should be created with KDTreeCreateRequestBuffer().
174
+ *************************************************************************/
175
+ class _kdtreerequestbuffer_owner
176
+ {
177
+ public:
178
+ _kdtreerequestbuffer_owner();
179
+ _kdtreerequestbuffer_owner(alglib_impl::kdtreerequestbuffer *attach_to);
180
+ _kdtreerequestbuffer_owner(const _kdtreerequestbuffer_owner &rhs);
181
+ _kdtreerequestbuffer_owner& operator=(const _kdtreerequestbuffer_owner &rhs);
182
+ virtual ~_kdtreerequestbuffer_owner();
183
+ alglib_impl::kdtreerequestbuffer* c_ptr();
184
+ const alglib_impl::kdtreerequestbuffer* c_ptr() const;
185
+ protected:
186
+ alglib_impl::kdtreerequestbuffer *p_struct;
187
+ bool is_attached;
188
+ };
189
+ class kdtreerequestbuffer : public _kdtreerequestbuffer_owner
190
+ {
191
+ public:
192
+ kdtreerequestbuffer();
193
+ kdtreerequestbuffer(alglib_impl::kdtreerequestbuffer *attach_to);
194
+ kdtreerequestbuffer(const kdtreerequestbuffer &rhs);
195
+ kdtreerequestbuffer& operator=(const kdtreerequestbuffer &rhs);
196
+ virtual ~kdtreerequestbuffer();
197
+
198
+ };
199
+
200
+
201
+ /*************************************************************************
202
+ KD-tree object.
203
+ *************************************************************************/
204
+ class _kdtree_owner
205
+ {
206
+ public:
207
+ _kdtree_owner();
208
+ _kdtree_owner(alglib_impl::kdtree *attach_to);
209
+ _kdtree_owner(const _kdtree_owner &rhs);
210
+ _kdtree_owner& operator=(const _kdtree_owner &rhs);
211
+ virtual ~_kdtree_owner();
212
+ alglib_impl::kdtree* c_ptr();
213
+ const alglib_impl::kdtree* c_ptr() const;
214
+ protected:
215
+ alglib_impl::kdtree *p_struct;
216
+ bool is_attached;
217
+ };
218
+ class kdtree : public _kdtree_owner
219
+ {
220
+ public:
221
+ kdtree();
222
+ kdtree(alglib_impl::kdtree *attach_to);
223
+ kdtree(const kdtree &rhs);
224
+ kdtree& operator=(const kdtree &rhs);
225
+ virtual ~kdtree();
226
+
227
+ };
228
+ #endif
229
+
230
+ #if defined(AE_COMPILE_XDEBUG) || !defined(AE_PARTIAL_BUILD)
231
+ /*************************************************************************
232
+ This is debug function intended for testing ALGLIB interface generator.
233
+ Never use it in any real life project.
234
+
235
+ Creates and returns XDebugRecord1 structure:
236
+ * integer and complex fields of Rec1 are set to 1 and 1+i correspondingly
237
+ * array field of Rec1 is set to [2,3]
238
+
239
+ -- ALGLIB --
240
+ Copyright 27.05.2014 by Bochkanov Sergey
241
+ *************************************************************************/
242
+ void xdebuginitrecord1(xdebugrecord1 &rec1, const xparams _xparams = alglib::xdefault);
243
+
244
+
245
+ /*************************************************************************
246
+ This is debug function intended for testing ALGLIB interface generator.
247
+ Never use it in any real life project.
248
+
249
+ Creates and returns XDebugRecord1 structure:
250
+ * integer and complex fields of Rec1 are set to 1 and 1+i correspondingly
251
+ * array field of Rec1 is set to [2,3]
252
+
253
+ -- ALGLIB --
254
+ Copyright 27.05.2014 by Bochkanov Sergey
255
+ *************************************************************************/
256
+ void xdebugupdaterecord1(xdebugrecord1 &rec1, const xparams _xparams = alglib::xdefault);
257
+
258
+
259
+ /*************************************************************************
260
+ This is debug function intended for testing ALGLIB interface generator.
261
+ Never use it in any real life project.
262
+
263
+ Counts number of True values in the boolean 1D array.
264
+
265
+ -- ALGLIB --
266
+ Copyright 11.10.2013 by Bochkanov Sergey
267
+ *************************************************************************/
268
+ ae_int_t xdebugb1count(const boolean_1d_array &a, const xparams _xparams = alglib::xdefault);
269
+
270
+
271
+ /*************************************************************************
272
+ This is debug function intended for testing ALGLIB interface generator.
273
+ Never use it in any real life project.
274
+
275
+ Replace all values in array by NOT(a[i]).
276
+ Array is passed using "shared" convention.
277
+
278
+ -- ALGLIB --
279
+ Copyright 11.10.2013 by Bochkanov Sergey
280
+ *************************************************************************/
281
+ void xdebugb1not(boolean_1d_array &a, const xparams _xparams = alglib::xdefault);
282
+
283
+
284
+ /*************************************************************************
285
+ This is debug function intended for testing ALGLIB interface generator.
286
+ Never use it in any real life project.
287
+
288
+ Appends copy of array to itself.
289
+ Array is passed using "var" convention.
290
+
291
+ -- ALGLIB --
292
+ Copyright 11.10.2013 by Bochkanov Sergey
293
+ *************************************************************************/
294
+ void xdebugb1appendcopy(boolean_1d_array &a, const xparams _xparams = alglib::xdefault);
295
+
296
+
297
+ /*************************************************************************
298
+ This is debug function intended for testing ALGLIB interface generator.
299
+ Never use it in any real life project.
300
+
301
+ Generate N-element array with even-numbered elements set to True.
302
+ Array is passed using "out" convention.
303
+
304
+ -- ALGLIB --
305
+ Copyright 11.10.2013 by Bochkanov Sergey
306
+ *************************************************************************/
307
+ void xdebugb1outeven(const ae_int_t n, boolean_1d_array &a, const xparams _xparams = alglib::xdefault);
308
+
309
+
310
+ /*************************************************************************
311
+ This is debug function intended for testing ALGLIB interface generator.
312
+ Never use it in any real life project.
313
+
314
+ Returns sum of elements in the array.
315
+
316
+ -- ALGLIB --
317
+ Copyright 11.10.2013 by Bochkanov Sergey
318
+ *************************************************************************/
319
+ ae_int_t xdebugi1sum(const integer_1d_array &a, const xparams _xparams = alglib::xdefault);
320
+
321
+
322
+ /*************************************************************************
323
+ This is debug function intended for testing ALGLIB interface generator.
324
+ Never use it in any real life project.
325
+
326
+ Replace all values in array by -A[I]
327
+ Array is passed using "shared" convention.
328
+
329
+ -- ALGLIB --
330
+ Copyright 11.10.2013 by Bochkanov Sergey
331
+ *************************************************************************/
332
+ void xdebugi1neg(integer_1d_array &a, const xparams _xparams = alglib::xdefault);
333
+
334
+
335
+ /*************************************************************************
336
+ This is debug function intended for testing ALGLIB interface generator.
337
+ Never use it in any real life project.
338
+
339
+ Appends copy of array to itself.
340
+ Array is passed using "var" convention.
341
+
342
+ -- ALGLIB --
343
+ Copyright 11.10.2013 by Bochkanov Sergey
344
+ *************************************************************************/
345
+ void xdebugi1appendcopy(integer_1d_array &a, const xparams _xparams = alglib::xdefault);
346
+
347
+
348
+ /*************************************************************************
349
+ This is debug function intended for testing ALGLIB interface generator.
350
+ Never use it in any real life project.
351
+
352
+ Generate N-element array with even-numbered A[I] set to I, and odd-numbered
353
+ ones set to 0.
354
+
355
+ Array is passed using "out" convention.
356
+
357
+ -- ALGLIB --
358
+ Copyright 11.10.2013 by Bochkanov Sergey
359
+ *************************************************************************/
360
+ void xdebugi1outeven(const ae_int_t n, integer_1d_array &a, const xparams _xparams = alglib::xdefault);
361
+
362
+
363
+ /*************************************************************************
364
+ This is debug function intended for testing ALGLIB interface generator.
365
+ Never use it in any real life project.
366
+
367
+ Returns sum of elements in the array.
368
+
369
+ -- ALGLIB --
370
+ Copyright 11.10.2013 by Bochkanov Sergey
371
+ *************************************************************************/
372
+ double xdebugr1sum(const real_1d_array &a, const xparams _xparams = alglib::xdefault);
373
+
374
+
375
+ /*************************************************************************
376
+ This is debug function intended for testing ALGLIB interface generator.
377
+ Never use it in any real life project.
378
+
379
+ Returns sum of elements in the array.
380
+
381
+ Internally it creates a copy of the array.
382
+
383
+ -- ALGLIB --
384
+ Copyright 11.10.2013 by Bochkanov Sergey
385
+ *************************************************************************/
386
+ double xdebugr1internalcopyandsum(const real_1d_array &a, const xparams _xparams = alglib::xdefault);
387
+
388
+
389
+ /*************************************************************************
390
+ This is debug function intended for testing ALGLIB interface generator.
391
+ Never use it in any real life project.
392
+
393
+ Replace all values in array by -A[I]
394
+ Array is passed using "shared" convention.
395
+
396
+ -- ALGLIB --
397
+ Copyright 11.10.2013 by Bochkanov Sergey
398
+ *************************************************************************/
399
+ void xdebugr1neg(real_1d_array &a, const xparams _xparams = alglib::xdefault);
400
+
401
+
402
+ /*************************************************************************
403
+ This is debug function intended for testing ALGLIB interface generator.
404
+ Never use it in any real life project.
405
+
406
+ Appends copy of array to itself.
407
+ Array is passed using "var" convention.
408
+
409
+ -- ALGLIB --
410
+ Copyright 11.10.2013 by Bochkanov Sergey
411
+ *************************************************************************/
412
+ void xdebugr1appendcopy(real_1d_array &a, const xparams _xparams = alglib::xdefault);
413
+
414
+
415
+ /*************************************************************************
416
+ This is debug function intended for testing ALGLIB interface generator.
417
+ Never use it in any real life project.
418
+
419
+ Generate N-element array with even-numbered A[I] set to I*0.25,
420
+ and odd-numbered ones are set to 0.
421
+
422
+ Array is passed using "out" convention.
423
+
424
+ -- ALGLIB --
425
+ Copyright 11.10.2013 by Bochkanov Sergey
426
+ *************************************************************************/
427
+ void xdebugr1outeven(const ae_int_t n, real_1d_array &a, const xparams _xparams = alglib::xdefault);
428
+
429
+
430
+ /*************************************************************************
431
+ This is debug function intended for testing ALGLIB interface generator.
432
+ Never use it in any real life project.
433
+
434
+ Returns sum of elements in the array.
435
+
436
+ -- ALGLIB --
437
+ Copyright 11.10.2013 by Bochkanov Sergey
438
+ *************************************************************************/
439
+ alglib::complex xdebugc1sum(const complex_1d_array &a, const xparams _xparams = alglib::xdefault);
440
+
441
+
442
+ /*************************************************************************
443
+ This is debug function intended for testing ALGLIB interface generator.
444
+ Never use it in any real life project.
445
+
446
+ Replace all values in array by -A[I]
447
+ Array is passed using "shared" convention.
448
+
449
+ -- ALGLIB --
450
+ Copyright 11.10.2013 by Bochkanov Sergey
451
+ *************************************************************************/
452
+ void xdebugc1neg(complex_1d_array &a, const xparams _xparams = alglib::xdefault);
453
+
454
+
455
+ /*************************************************************************
456
+ This is debug function intended for testing ALGLIB interface generator.
457
+ Never use it in any real life project.
458
+
459
+ Appends copy of array to itself.
460
+ Array is passed using "var" convention.
461
+
462
+ -- ALGLIB --
463
+ Copyright 11.10.2013 by Bochkanov Sergey
464
+ *************************************************************************/
465
+ void xdebugc1appendcopy(complex_1d_array &a, const xparams _xparams = alglib::xdefault);
466
+
467
+
468
+ /*************************************************************************
469
+ This is debug function intended for testing ALGLIB interface generator.
470
+ Never use it in any real life project.
471
+
472
+ Generate N-element array with even-numbered A[K] set to (x,y) = (K*0.25, K*0.125)
473
+ and odd-numbered ones are set to 0.
474
+
475
+ Array is passed using "out" convention.
476
+
477
+ -- ALGLIB --
478
+ Copyright 11.10.2013 by Bochkanov Sergey
479
+ *************************************************************************/
480
+ void xdebugc1outeven(const ae_int_t n, complex_1d_array &a, const xparams _xparams = alglib::xdefault);
481
+
482
+
483
+ /*************************************************************************
484
+ This is debug function intended for testing ALGLIB interface generator.
485
+ Never use it in any real life project.
486
+
487
+ Counts number of True values in the boolean 2D array.
488
+
489
+ -- ALGLIB --
490
+ Copyright 11.10.2013 by Bochkanov Sergey
491
+ *************************************************************************/
492
+ ae_int_t xdebugb2count(const boolean_2d_array &a, const xparams _xparams = alglib::xdefault);
493
+
494
+
495
+ /*************************************************************************
496
+ This is debug function intended for testing ALGLIB interface generator.
497
+ Never use it in any real life project.
498
+
499
+ Replace all values in array by NOT(a[i]).
500
+ Array is passed using "shared" convention.
501
+
502
+ -- ALGLIB --
503
+ Copyright 11.10.2013 by Bochkanov Sergey
504
+ *************************************************************************/
505
+ void xdebugb2not(boolean_2d_array &a, const xparams _xparams = alglib::xdefault);
506
+
507
+
508
+ /*************************************************************************
509
+ This is debug function intended for testing ALGLIB interface generator.
510
+ Never use it in any real life project.
511
+
512
+ Transposes array.
513
+ Array is passed using "var" convention.
514
+
515
+ -- ALGLIB --
516
+ Copyright 11.10.2013 by Bochkanov Sergey
517
+ *************************************************************************/
518
+ void xdebugb2transpose(boolean_2d_array &a, const xparams _xparams = alglib::xdefault);
519
+
520
+
521
+ /*************************************************************************
522
+ This is debug function intended for testing ALGLIB interface generator.
523
+ Never use it in any real life project.
524
+
525
+ Generate MxN matrix with elements set to "Sin(3*I+5*J)>0"
526
+ Array is passed using "out" convention.
527
+
528
+ -- ALGLIB --
529
+ Copyright 11.10.2013 by Bochkanov Sergey
530
+ *************************************************************************/
531
+ void xdebugb2outsin(const ae_int_t m, const ae_int_t n, boolean_2d_array &a, const xparams _xparams = alglib::xdefault);
532
+
533
+
534
+ /*************************************************************************
535
+ This is debug function intended for testing ALGLIB interface generator.
536
+ Never use it in any real life project.
537
+
538
+ Returns sum of elements in the array.
539
+
540
+ -- ALGLIB --
541
+ Copyright 11.10.2013 by Bochkanov Sergey
542
+ *************************************************************************/
543
+ ae_int_t xdebugi2sum(const integer_2d_array &a, const xparams _xparams = alglib::xdefault);
544
+
545
+
546
+ /*************************************************************************
547
+ This is debug function intended for testing ALGLIB interface generator.
548
+ Never use it in any real life project.
549
+
550
+ Replace all values in array by -a[i,j]
551
+ Array is passed using "shared" convention.
552
+
553
+ -- ALGLIB --
554
+ Copyright 11.10.2013 by Bochkanov Sergey
555
+ *************************************************************************/
556
+ void xdebugi2neg(integer_2d_array &a, const xparams _xparams = alglib::xdefault);
557
+
558
+
559
+ /*************************************************************************
560
+ This is debug function intended for testing ALGLIB interface generator.
561
+ Never use it in any real life project.
562
+
563
+ Transposes array.
564
+ Array is passed using "var" convention.
565
+
566
+ -- ALGLIB --
567
+ Copyright 11.10.2013 by Bochkanov Sergey
568
+ *************************************************************************/
569
+ void xdebugi2transpose(integer_2d_array &a, const xparams _xparams = alglib::xdefault);
570
+
571
+
572
+ /*************************************************************************
573
+ This is debug function intended for testing ALGLIB interface generator.
574
+ Never use it in any real life project.
575
+
576
+ Generate MxN matrix with elements set to "Sign(Sin(3*I+5*J))"
577
+ Array is passed using "out" convention.
578
+
579
+ -- ALGLIB --
580
+ Copyright 11.10.2013 by Bochkanov Sergey
581
+ *************************************************************************/
582
+ void xdebugi2outsin(const ae_int_t m, const ae_int_t n, integer_2d_array &a, const xparams _xparams = alglib::xdefault);
583
+
584
+
585
+ /*************************************************************************
586
+ This is debug function intended for testing ALGLIB interface generator.
587
+ Never use it in any real life project.
588
+
589
+ Returns sum of elements in the array.
590
+
591
+ -- ALGLIB --
592
+ Copyright 11.10.2013 by Bochkanov Sergey
593
+ *************************************************************************/
594
+ double xdebugr2sum(const real_2d_array &a, const xparams _xparams = alglib::xdefault);
595
+
596
+
597
+ /*************************************************************************
598
+ This is debug function intended for testing ALGLIB interface generator.
599
+ Never use it in any real life project.
600
+
601
+ Returns sum of elements in the array.
602
+
603
+ Internally it creates a copy of a.
604
+
605
+ -- ALGLIB --
606
+ Copyright 11.10.2013 by Bochkanov Sergey
607
+ *************************************************************************/
608
+ double xdebugr2internalcopyandsum(const real_2d_array &a, const xparams _xparams = alglib::xdefault);
609
+
610
+
611
+ /*************************************************************************
612
+ This is debug function intended for testing ALGLIB interface generator.
613
+ Never use it in any real life project.
614
+
615
+ Replace all values in array by -a[i,j]
616
+ Array is passed using "shared" convention.
617
+
618
+ -- ALGLIB --
619
+ Copyright 11.10.2013 by Bochkanov Sergey
620
+ *************************************************************************/
621
+ void xdebugr2neg(real_2d_array &a, const xparams _xparams = alglib::xdefault);
622
+
623
+
624
+ /*************************************************************************
625
+ This is debug function intended for testing ALGLIB interface generator.
626
+ Never use it in any real life project.
627
+
628
+ Transposes array.
629
+ Array is passed using "var" convention.
630
+
631
+ -- ALGLIB --
632
+ Copyright 11.10.2013 by Bochkanov Sergey
633
+ *************************************************************************/
634
+ void xdebugr2transpose(real_2d_array &a, const xparams _xparams = alglib::xdefault);
635
+
636
+
637
+ /*************************************************************************
638
+ This is debug function intended for testing ALGLIB interface generator.
639
+ Never use it in any real life project.
640
+
641
+ Generate MxN matrix with elements set to "Sin(3*I+5*J)"
642
+ Array is passed using "out" convention.
643
+
644
+ -- ALGLIB --
645
+ Copyright 11.10.2013 by Bochkanov Sergey
646
+ *************************************************************************/
647
+ void xdebugr2outsin(const ae_int_t m, const ae_int_t n, real_2d_array &a, const xparams _xparams = alglib::xdefault);
648
+
649
+
650
+ /*************************************************************************
651
+ This is debug function intended for testing ALGLIB interface generator.
652
+ Never use it in any real life project.
653
+
654
+ Returns sum of elements in the array.
655
+
656
+ -- ALGLIB --
657
+ Copyright 11.10.2013 by Bochkanov Sergey
658
+ *************************************************************************/
659
+ alglib::complex xdebugc2sum(const complex_2d_array &a, const xparams _xparams = alglib::xdefault);
660
+
661
+
662
+ /*************************************************************************
663
+ This is debug function intended for testing ALGLIB interface generator.
664
+ Never use it in any real life project.
665
+
666
+ Replace all values in array by -a[i,j]
667
+ Array is passed using "shared" convention.
668
+
669
+ -- ALGLIB --
670
+ Copyright 11.10.2013 by Bochkanov Sergey
671
+ *************************************************************************/
672
+ void xdebugc2neg(complex_2d_array &a, const xparams _xparams = alglib::xdefault);
673
+
674
+
675
+ /*************************************************************************
676
+ This is debug function intended for testing ALGLIB interface generator.
677
+ Never use it in any real life project.
678
+
679
+ Transposes array.
680
+ Array is passed using "var" convention.
681
+
682
+ -- ALGLIB --
683
+ Copyright 11.10.2013 by Bochkanov Sergey
684
+ *************************************************************************/
685
+ void xdebugc2transpose(complex_2d_array &a, const xparams _xparams = alglib::xdefault);
686
+
687
+
688
+ /*************************************************************************
689
+ This is debug function intended for testing ALGLIB interface generator.
690
+ Never use it in any real life project.
691
+
692
+ Generate MxN matrix with elements set to "Sin(3*I+5*J),Cos(3*I+5*J)"
693
+ Array is passed using "out" convention.
694
+
695
+ -- ALGLIB --
696
+ Copyright 11.10.2013 by Bochkanov Sergey
697
+ *************************************************************************/
698
+ void xdebugc2outsincos(const ae_int_t m, const ae_int_t n, complex_2d_array &a, const xparams _xparams = alglib::xdefault);
699
+
700
+
701
+ /*************************************************************************
702
+ This is debug function intended for testing ALGLIB interface generator.
703
+ Never use it in any real life project.
704
+
705
+ Returns sum of a[i,j]*(1+b[i,j]) such that c[i,j] is True
706
+
707
+ -- ALGLIB --
708
+ Copyright 11.10.2013 by Bochkanov Sergey
709
+ *************************************************************************/
710
+ double xdebugmaskedbiasedproductsum(const ae_int_t m, const ae_int_t n, const real_2d_array &a, const real_2d_array &b, const boolean_2d_array &c, const xparams _xparams = alglib::xdefault);
711
+ #endif
712
+
713
+ #if defined(AE_COMPILE_HQRND) || !defined(AE_PARTIAL_BUILD)
714
+ /*************************************************************************
715
+ HQRNDState initialization with random values which come from standard
716
+ RNG.
717
+
718
+ -- ALGLIB --
719
+ Copyright 02.12.2009 by Bochkanov Sergey
720
+ *************************************************************************/
721
+ void hqrndrandomize(hqrndstate &state, const xparams _xparams = alglib::xdefault);
722
+
723
+
724
+ /*************************************************************************
725
+ HQRNDState initialization with seed values
726
+
727
+ -- ALGLIB --
728
+ Copyright 02.12.2009 by Bochkanov Sergey
729
+ *************************************************************************/
730
+ void hqrndseed(const ae_int_t s1, const ae_int_t s2, hqrndstate &state, const xparams _xparams = alglib::xdefault);
731
+
732
+
733
+ /*************************************************************************
734
+ This function generates random real number in (0,1),
735
+ not including interval boundaries
736
+
737
+ State structure must be initialized with HQRNDRandomize() or HQRNDSeed().
738
+
739
+ -- ALGLIB --
740
+ Copyright 02.12.2009 by Bochkanov Sergey
741
+ *************************************************************************/
742
+ double hqrnduniformr(hqrndstate &state, const xparams _xparams = alglib::xdefault);
743
+
744
+
745
+ /*************************************************************************
746
+ This function generates random integer number in [0, N)
747
+
748
+ 1. State structure must be initialized with HQRNDRandomize() or HQRNDSeed()
749
+ 2. N can be any positive number except for very large numbers:
750
+ * close to 2^31 on 32-bit systems
751
+ * close to 2^62 on 64-bit systems
752
+ An exception will be generated if N is too large.
753
+
754
+ -- ALGLIB --
755
+ Copyright 02.12.2009 by Bochkanov Sergey
756
+ *************************************************************************/
757
+ ae_int_t hqrnduniformi(hqrndstate &state, const ae_int_t n, const xparams _xparams = alglib::xdefault);
758
+
759
+
760
+ /*************************************************************************
761
+ Random number generator: normal numbers
762
+
763
+ This function generates one random number from normal distribution.
764
+ Its performance is equal to that of HQRNDNormal2()
765
+
766
+ State structure must be initialized with HQRNDRandomize() or HQRNDSeed().
767
+
768
+ -- ALGLIB --
769
+ Copyright 02.12.2009 by Bochkanov Sergey
770
+ *************************************************************************/
771
+ double hqrndnormal(hqrndstate &state, const xparams _xparams = alglib::xdefault);
772
+
773
+
774
+ /*************************************************************************
775
+ Random number generator: vector with random entries (normal distribution)
776
+
777
+ This function generates N random numbers from normal distribution.
778
+
779
+ State structure must be initialized with HQRNDRandomize() or HQRNDSeed().
780
+
781
+ -- ALGLIB --
782
+ Copyright 02.12.2009 by Bochkanov Sergey
783
+ *************************************************************************/
784
+ void hqrndnormalv(hqrndstate &state, const ae_int_t n, real_1d_array &x, const xparams _xparams = alglib::xdefault);
785
+
786
+
787
+ /*************************************************************************
788
+ Random number generator: matrix with random entries (normal distribution)
789
+
790
+ This function generates MxN random matrix.
791
+
792
+ State structure must be initialized with HQRNDRandomize() or HQRNDSeed().
793
+
794
+ -- ALGLIB --
795
+ Copyright 02.12.2009 by Bochkanov Sergey
796
+ *************************************************************************/
797
+ void hqrndnormalm(hqrndstate &state, const ae_int_t m, const ae_int_t n, real_2d_array &x, const xparams _xparams = alglib::xdefault);
798
+
799
+
800
+ /*************************************************************************
801
+ Random number generator: random X and Y such that X^2+Y^2=1
802
+
803
+ State structure must be initialized with HQRNDRandomize() or HQRNDSeed().
804
+
805
+ -- ALGLIB --
806
+ Copyright 02.12.2009 by Bochkanov Sergey
807
+ *************************************************************************/
808
+ void hqrndunit2(hqrndstate &state, double &x, double &y, const xparams _xparams = alglib::xdefault);
809
+
810
+
811
+ /*************************************************************************
812
+ Random number generator: normal numbers
813
+
814
+ This function generates two independent random numbers from normal
815
+ distribution. Its performance is equal to that of HQRNDNormal()
816
+
817
+ State structure must be initialized with HQRNDRandomize() or HQRNDSeed().
818
+
819
+ -- ALGLIB --
820
+ Copyright 02.12.2009 by Bochkanov Sergey
821
+ *************************************************************************/
822
+ void hqrndnormal2(hqrndstate &state, double &x1, double &x2, const xparams _xparams = alglib::xdefault);
823
+
824
+
825
+ /*************************************************************************
826
+ Random number generator: exponential distribution
827
+
828
+ State structure must be initialized with HQRNDRandomize() or HQRNDSeed().
829
+
830
+ -- ALGLIB --
831
+ Copyright 11.08.2007 by Bochkanov Sergey
832
+ *************************************************************************/
833
+ double hqrndexponential(hqrndstate &state, const double lambdav, const xparams _xparams = alglib::xdefault);
834
+
835
+
836
+ /*************************************************************************
837
+ This function generates random number from discrete distribution given by
838
+ finite sample X.
839
+
840
+ INPUT PARAMETERS
841
+ State - high quality random number generator, must be
842
+ initialized with HQRNDRandomize() or HQRNDSeed().
843
+ X - finite sample
844
+ N - number of elements to use, N>=1
845
+
846
+ RESULT
847
+ this function returns one of the X[i] for random i=0..N-1
848
+
849
+ -- ALGLIB --
850
+ Copyright 08.11.2011 by Bochkanov Sergey
851
+ *************************************************************************/
852
+ double hqrnddiscrete(hqrndstate &state, const real_1d_array &x, const ae_int_t n, const xparams _xparams = alglib::xdefault);
853
+
854
+
855
+ /*************************************************************************
856
+ This function generates random number from continuous distribution given
857
+ by finite sample X.
858
+
859
+ INPUT PARAMETERS
860
+ State - high quality random number generator, must be
861
+ initialized with HQRNDRandomize() or HQRNDSeed().
862
+ X - finite sample, array[N] (can be larger, in this case only
863
+ leading N elements are used). THIS ARRAY MUST BE SORTED BY
864
+ ASCENDING.
865
+ N - number of elements to use, N>=1
866
+
867
+ RESULT
868
+ this function returns random number from continuous distribution which
869
+ tries to approximate X as mush as possible. min(X)<=Result<=max(X).
870
+
871
+ -- ALGLIB --
872
+ Copyright 08.11.2011 by Bochkanov Sergey
873
+ *************************************************************************/
874
+ double hqrndcontinuous(hqrndstate &state, const real_1d_array &x, const ae_int_t n, const xparams _xparams = alglib::xdefault);
875
+ #endif
876
+
877
+ #if defined(AE_COMPILE_NEARESTNEIGHBOR) || !defined(AE_PARTIAL_BUILD)
878
+ /*************************************************************************
879
+ This function serializes data structure to string.
880
+
881
+ Important properties of s_out:
882
+ * it contains alphanumeric characters, dots, underscores, minus signs
883
+ * these symbols are grouped into words, which are separated by spaces
884
+ and Windows-style (CR+LF) newlines
885
+ * although serializer uses spaces and CR+LF as separators, you can
886
+ replace any separator character by arbitrary combination of spaces,
887
+ tabs, Windows or Unix newlines. It allows flexible reformatting of
888
+ the string in case you want to include it into a text or XML file.
889
+ But you should not insert separators into the middle of the "words"
890
+ nor should you change the case of letters.
891
+ * s_out can be freely moved between 32-bit and 64-bit systems, little
892
+ and big endian machines, and so on. You can serialize structure on
893
+ 32-bit machine and unserialize it on 64-bit one (or vice versa), or
894
+ serialize it on SPARC and unserialize on x86. You can also
895
+ serialize it in C++ version of ALGLIB and unserialize it in C# one,
896
+ and vice versa.
897
+ *************************************************************************/
898
+ void kdtreeserialize(const kdtree &obj, std::string &s_out);
899
+
900
+
901
+ /*************************************************************************
902
+ This function serializes data structure to C++ stream.
903
+
904
+ Data stream generated by this function is same as string representation
905
+ generated by string version of serializer - alphanumeric characters,
906
+ dots, underscores, minus signs, which are grouped into words separated by
907
+ spaces and CR+LF.
908
+
909
+ We recommend you to read comments on string version of serializer to find
910
+ out more about serialization of AlGLIB objects.
911
+ *************************************************************************/
912
+ void kdtreeserialize(const kdtree &obj, std::ostream &s_out);
913
+
914
+
915
+ /*************************************************************************
916
+ This function unserializes data structure from string.
917
+ *************************************************************************/
918
+ void kdtreeunserialize(const std::string &s_in, kdtree &obj);
919
+
920
+
921
+ /*************************************************************************
922
+ This function unserializes data structure from stream.
923
+ *************************************************************************/
924
+ void kdtreeunserialize(const std::istream &s_in, kdtree &obj);
925
+
926
+
927
+ /*************************************************************************
928
+ KD-tree creation
929
+
930
+ This subroutine creates KD-tree from set of X-values and optional Y-values
931
+
932
+ INPUT PARAMETERS
933
+ XY - dataset, array[0..N-1,0..NX+NY-1].
934
+ one row corresponds to one point.
935
+ first NX columns contain X-values, next NY (NY may be zero)
936
+ columns may contain associated Y-values
937
+ N - number of points, N>=0.
938
+ NX - space dimension, NX>=1.
939
+ NY - number of optional Y-values, NY>=0.
940
+ NormType- norm type:
941
+ * 0 denotes infinity-norm
942
+ * 1 denotes 1-norm
943
+ * 2 denotes 2-norm (Euclidean norm)
944
+
945
+ OUTPUT PARAMETERS
946
+ KDT - KD-tree
947
+
948
+
949
+ NOTES
950
+
951
+ 1. KD-tree creation have O(N*logN) complexity and O(N*(2*NX+NY)) memory
952
+ requirements.
953
+ 2. Although KD-trees may be used with any combination of N and NX, they
954
+ are more efficient than brute-force search only when N >> 4^NX. So they
955
+ are most useful in low-dimensional tasks (NX=2, NX=3). NX=1 is another
956
+ inefficient case, because simple binary search (without additional
957
+ structures) is much more efficient in such tasks than KD-trees.
958
+
959
+ -- ALGLIB --
960
+ Copyright 28.02.2010 by Bochkanov Sergey
961
+ *************************************************************************/
962
+ 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, const xparams _xparams = alglib::xdefault);
963
+ void kdtreebuild(const real_2d_array &xy, const ae_int_t nx, const ae_int_t ny, const ae_int_t normtype, kdtree &kdt, const xparams _xparams = alglib::xdefault);
964
+
965
+
966
+ /*************************************************************************
967
+ KD-tree creation
968
+
969
+ This subroutine creates KD-tree from set of X-values, integer tags and
970
+ optional Y-values
971
+
972
+ INPUT PARAMETERS
973
+ XY - dataset, array[0..N-1,0..NX+NY-1].
974
+ one row corresponds to one point.
975
+ first NX columns contain X-values, next NY (NY may be zero)
976
+ columns may contain associated Y-values
977
+ Tags - tags, array[0..N-1], contains integer tags associated
978
+ with points.
979
+ N - number of points, N>=0
980
+ NX - space dimension, NX>=1.
981
+ NY - number of optional Y-values, NY>=0.
982
+ NormType- norm type:
983
+ * 0 denotes infinity-norm
984
+ * 1 denotes 1-norm
985
+ * 2 denotes 2-norm (Euclidean norm)
986
+
987
+ OUTPUT PARAMETERS
988
+ KDT - KD-tree
989
+
990
+ NOTES
991
+
992
+ 1. KD-tree creation have O(N*logN) complexity and O(N*(2*NX+NY)) memory
993
+ requirements.
994
+ 2. Although KD-trees may be used with any combination of N and NX, they
995
+ are more efficient than brute-force search only when N >> 4^NX. So they
996
+ are most useful in low-dimensional tasks (NX=2, NX=3). NX=1 is another
997
+ inefficient case, because simple binary search (without additional
998
+ structures) is much more efficient in such tasks than KD-trees.
999
+
1000
+ -- ALGLIB --
1001
+ Copyright 28.02.2010 by Bochkanov Sergey
1002
+ *************************************************************************/
1003
+ 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, const xparams _xparams = alglib::xdefault);
1004
+ void kdtreebuildtagged(const real_2d_array &xy, const integer_1d_array &tags, const ae_int_t nx, const ae_int_t ny, const ae_int_t normtype, kdtree &kdt, const xparams _xparams = alglib::xdefault);
1005
+
1006
+
1007
+ /*************************************************************************
1008
+ This function creates buffer structure which can be used to perform
1009
+ parallel KD-tree requests.
1010
+
1011
+ KD-tree subpackage provides two sets of request functions - ones which use
1012
+ internal buffer of KD-tree object (these functions are single-threaded
1013
+ because they use same buffer, which can not shared between threads), and
1014
+ ones which use external buffer.
1015
+
1016
+ This function is used to initialize external buffer.
1017
+
1018
+ INPUT PARAMETERS
1019
+ KDT - KD-tree which is associated with newly created buffer
1020
+
1021
+ OUTPUT PARAMETERS
1022
+ Buf - external buffer.
1023
+
1024
+
1025
+ IMPORTANT: KD-tree buffer should be used only with KD-tree object which
1026
+ was used to initialize buffer. Any attempt to use buffer with
1027
+ different object is dangerous - you may get integrity check
1028
+ failure (exception) because sizes of internal arrays do not fit
1029
+ to dimensions of KD-tree structure.
1030
+
1031
+ -- ALGLIB --
1032
+ Copyright 18.03.2016 by Bochkanov Sergey
1033
+ *************************************************************************/
1034
+ void kdtreecreaterequestbuffer(const kdtree &kdt, kdtreerequestbuffer &buf, const xparams _xparams = alglib::xdefault);
1035
+
1036
+
1037
+ /*************************************************************************
1038
+ K-NN query: K nearest neighbors
1039
+
1040
+ IMPORTANT: this function can not be used in multithreaded code because it
1041
+ uses internal temporary buffer of kd-tree object, which can not
1042
+ be shared between multiple threads. If you want to perform
1043
+ parallel requests, use function which uses external request
1044
+ buffer: KDTreeTsQueryKNN() ("Ts" stands for "thread-safe").
1045
+
1046
+ INPUT PARAMETERS
1047
+ KDT - KD-tree
1048
+ X - point, array[0..NX-1].
1049
+ K - number of neighbors to return, K>=1
1050
+ SelfMatch - whether self-matches are allowed:
1051
+ * if True, nearest neighbor may be the point itself
1052
+ (if it exists in original dataset)
1053
+ * if False, then only points with non-zero distance
1054
+ are returned
1055
+ * if not given, considered True
1056
+
1057
+ RESULT
1058
+ number of actual neighbors found (either K or N, if K>N).
1059
+
1060
+ This subroutine performs query and stores its result in the internal
1061
+ structures of the KD-tree. You can use following subroutines to obtain
1062
+ these results:
1063
+ * KDTreeQueryResultsX() to get X-values
1064
+ * KDTreeQueryResultsXY() to get X- and Y-values
1065
+ * KDTreeQueryResultsTags() to get tag values
1066
+ * KDTreeQueryResultsDistances() to get distances
1067
+
1068
+ -- ALGLIB --
1069
+ Copyright 28.02.2010 by Bochkanov Sergey
1070
+ *************************************************************************/
1071
+ ae_int_t kdtreequeryknn(kdtree &kdt, const real_1d_array &x, const ae_int_t k, const bool selfmatch, const xparams _xparams = alglib::xdefault);
1072
+ ae_int_t kdtreequeryknn(kdtree &kdt, const real_1d_array &x, const ae_int_t k, const xparams _xparams = alglib::xdefault);
1073
+
1074
+
1075
+ /*************************************************************************
1076
+ K-NN query: K nearest neighbors, using external thread-local buffer.
1077
+
1078
+ You can call this function from multiple threads for same kd-tree instance,
1079
+ assuming that different instances of buffer object are passed to different
1080
+ threads.
1081
+
1082
+ INPUT PARAMETERS
1083
+ KDT - kd-tree
1084
+ Buf - request buffer object created for this particular
1085
+ instance of kd-tree structure with kdtreecreaterequestbuffer()
1086
+ function.
1087
+ X - point, array[0..NX-1].
1088
+ K - number of neighbors to return, K>=1
1089
+ SelfMatch - whether self-matches are allowed:
1090
+ * if True, nearest neighbor may be the point itself
1091
+ (if it exists in original dataset)
1092
+ * if False, then only points with non-zero distance
1093
+ are returned
1094
+ * if not given, considered True
1095
+
1096
+ RESULT
1097
+ number of actual neighbors found (either K or N, if K>N).
1098
+
1099
+ This subroutine performs query and stores its result in the internal
1100
+ structures of the buffer object. You can use following subroutines to
1101
+ obtain these results (pay attention to "buf" in their names):
1102
+ * KDTreeTsQueryResultsX() to get X-values
1103
+ * KDTreeTsQueryResultsXY() to get X- and Y-values
1104
+ * KDTreeTsQueryResultsTags() to get tag values
1105
+ * KDTreeTsQueryResultsDistances() to get distances
1106
+
1107
+ IMPORTANT: kd-tree buffer should be used only with KD-tree object which
1108
+ was used to initialize buffer. Any attempt to use biffer with
1109
+ different object is dangerous - you may get integrity check
1110
+ failure (exception) because sizes of internal arrays do not fit
1111
+ to dimensions of KD-tree structure.
1112
+
1113
+ -- ALGLIB --
1114
+ Copyright 18.03.2016 by Bochkanov Sergey
1115
+ *************************************************************************/
1116
+ ae_int_t kdtreetsqueryknn(const kdtree &kdt, kdtreerequestbuffer &buf, const real_1d_array &x, const ae_int_t k, const bool selfmatch, const xparams _xparams = alglib::xdefault);
1117
+ ae_int_t kdtreetsqueryknn(const kdtree &kdt, kdtreerequestbuffer &buf, const real_1d_array &x, const ae_int_t k, const xparams _xparams = alglib::xdefault);
1118
+
1119
+
1120
+ /*************************************************************************
1121
+ R-NN query: all points within R-sphere centered at X, ordered by distance
1122
+ between point and X (by ascending).
1123
+
1124
+ NOTE: it is also possible to perform undordered queries performed by means
1125
+ of kdtreequeryrnnu() and kdtreetsqueryrnnu() functions. Such queries
1126
+ are faster because we do not have to use heap structure for sorting.
1127
+
1128
+ IMPORTANT: this function can not be used in multithreaded code because it
1129
+ uses internal temporary buffer of kd-tree object, which can not
1130
+ be shared between multiple threads. If you want to perform
1131
+ parallel requests, use function which uses external request
1132
+ buffer: kdtreetsqueryrnn() ("Ts" stands for "thread-safe").
1133
+
1134
+ INPUT PARAMETERS
1135
+ KDT - KD-tree
1136
+ X - point, array[0..NX-1].
1137
+ R - radius of sphere (in corresponding norm), R>0
1138
+ SelfMatch - whether self-matches are allowed:
1139
+ * if True, nearest neighbor may be the point itself
1140
+ (if it exists in original dataset)
1141
+ * if False, then only points with non-zero distance
1142
+ are returned
1143
+ * if not given, considered True
1144
+
1145
+ RESULT
1146
+ number of neighbors found, >=0
1147
+
1148
+ This subroutine performs query and stores its result in the internal
1149
+ structures of the KD-tree. You can use following subroutines to obtain
1150
+ actual results:
1151
+ * KDTreeQueryResultsX() to get X-values
1152
+ * KDTreeQueryResultsXY() to get X- and Y-values
1153
+ * KDTreeQueryResultsTags() to get tag values
1154
+ * KDTreeQueryResultsDistances() to get distances
1155
+
1156
+ -- ALGLIB --
1157
+ Copyright 28.02.2010 by Bochkanov Sergey
1158
+ *************************************************************************/
1159
+ ae_int_t kdtreequeryrnn(kdtree &kdt, const real_1d_array &x, const double r, const bool selfmatch, const xparams _xparams = alglib::xdefault);
1160
+ ae_int_t kdtreequeryrnn(kdtree &kdt, const real_1d_array &x, const double r, const xparams _xparams = alglib::xdefault);
1161
+
1162
+
1163
+ /*************************************************************************
1164
+ R-NN query: all points within R-sphere centered at X, no ordering by
1165
+ distance as undicated by "U" suffix (faster that ordered query, for large
1166
+ queries - significantly faster).
1167
+
1168
+ IMPORTANT: this function can not be used in multithreaded code because it
1169
+ uses internal temporary buffer of kd-tree object, which can not
1170
+ be shared between multiple threads. If you want to perform
1171
+ parallel requests, use function which uses external request
1172
+ buffer: kdtreetsqueryrnn() ("Ts" stands for "thread-safe").
1173
+
1174
+ INPUT PARAMETERS
1175
+ KDT - KD-tree
1176
+ X - point, array[0..NX-1].
1177
+ R - radius of sphere (in corresponding norm), R>0
1178
+ SelfMatch - whether self-matches are allowed:
1179
+ * if True, nearest neighbor may be the point itself
1180
+ (if it exists in original dataset)
1181
+ * if False, then only points with non-zero distance
1182
+ are returned
1183
+ * if not given, considered True
1184
+
1185
+ RESULT
1186
+ number of neighbors found, >=0
1187
+
1188
+ This subroutine performs query and stores its result in the internal
1189
+ structures of the KD-tree. You can use following subroutines to obtain
1190
+ actual results:
1191
+ * KDTreeQueryResultsX() to get X-values
1192
+ * KDTreeQueryResultsXY() to get X- and Y-values
1193
+ * KDTreeQueryResultsTags() to get tag values
1194
+ * KDTreeQueryResultsDistances() to get distances
1195
+
1196
+ As indicated by "U" suffix, this function returns unordered results.
1197
+
1198
+ -- ALGLIB --
1199
+ Copyright 01.11.2018 by Bochkanov Sergey
1200
+ *************************************************************************/
1201
+ ae_int_t kdtreequeryrnnu(kdtree &kdt, const real_1d_array &x, const double r, const bool selfmatch, const xparams _xparams = alglib::xdefault);
1202
+ ae_int_t kdtreequeryrnnu(kdtree &kdt, const real_1d_array &x, const double r, const xparams _xparams = alglib::xdefault);
1203
+
1204
+
1205
+ /*************************************************************************
1206
+ R-NN query: all points within R-sphere centered at X, using external
1207
+ thread-local buffer, sorted by distance between point and X (by ascending)
1208
+
1209
+ You can call this function from multiple threads for same kd-tree instance,
1210
+ assuming that different instances of buffer object are passed to different
1211
+ threads.
1212
+
1213
+ NOTE: it is also possible to perform undordered queries performed by means
1214
+ of kdtreequeryrnnu() and kdtreetsqueryrnnu() functions. Such queries
1215
+ are faster because we do not have to use heap structure for sorting.
1216
+
1217
+ INPUT PARAMETERS
1218
+ KDT - KD-tree
1219
+ Buf - request buffer object created for this particular
1220
+ instance of kd-tree structure with kdtreecreaterequestbuffer()
1221
+ function.
1222
+ X - point, array[0..NX-1].
1223
+ R - radius of sphere (in corresponding norm), R>0
1224
+ SelfMatch - whether self-matches are allowed:
1225
+ * if True, nearest neighbor may be the point itself
1226
+ (if it exists in original dataset)
1227
+ * if False, then only points with non-zero distance
1228
+ are returned
1229
+ * if not given, considered True
1230
+
1231
+ RESULT
1232
+ number of neighbors found, >=0
1233
+
1234
+ This subroutine performs query and stores its result in the internal
1235
+ structures of the buffer object. You can use following subroutines to
1236
+ obtain these results (pay attention to "buf" in their names):
1237
+ * KDTreeTsQueryResultsX() to get X-values
1238
+ * KDTreeTsQueryResultsXY() to get X- and Y-values
1239
+ * KDTreeTsQueryResultsTags() to get tag values
1240
+ * KDTreeTsQueryResultsDistances() to get distances
1241
+
1242
+ IMPORTANT: kd-tree buffer should be used only with KD-tree object which
1243
+ was used to initialize buffer. Any attempt to use biffer with
1244
+ different object is dangerous - you may get integrity check
1245
+ failure (exception) because sizes of internal arrays do not fit
1246
+ to dimensions of KD-tree structure.
1247
+
1248
+ -- ALGLIB --
1249
+ Copyright 18.03.2016 by Bochkanov Sergey
1250
+ *************************************************************************/
1251
+ ae_int_t kdtreetsqueryrnn(const kdtree &kdt, kdtreerequestbuffer &buf, const real_1d_array &x, const double r, const bool selfmatch, const xparams _xparams = alglib::xdefault);
1252
+ ae_int_t kdtreetsqueryrnn(const kdtree &kdt, kdtreerequestbuffer &buf, const real_1d_array &x, const double r, const xparams _xparams = alglib::xdefault);
1253
+
1254
+
1255
+ /*************************************************************************
1256
+ R-NN query: all points within R-sphere centered at X, using external
1257
+ thread-local buffer, no ordering by distance as undicated by "U" suffix
1258
+ (faster that ordered query, for large queries - significantly faster).
1259
+
1260
+ You can call this function from multiple threads for same kd-tree instance,
1261
+ assuming that different instances of buffer object are passed to different
1262
+ threads.
1263
+
1264
+ INPUT PARAMETERS
1265
+ KDT - KD-tree
1266
+ Buf - request buffer object created for this particular
1267
+ instance of kd-tree structure with kdtreecreaterequestbuffer()
1268
+ function.
1269
+ X - point, array[0..NX-1].
1270
+ R - radius of sphere (in corresponding norm), R>0
1271
+ SelfMatch - whether self-matches are allowed:
1272
+ * if True, nearest neighbor may be the point itself
1273
+ (if it exists in original dataset)
1274
+ * if False, then only points with non-zero distance
1275
+ are returned
1276
+ * if not given, considered True
1277
+
1278
+ RESULT
1279
+ number of neighbors found, >=0
1280
+
1281
+ This subroutine performs query and stores its result in the internal
1282
+ structures of the buffer object. You can use following subroutines to
1283
+ obtain these results (pay attention to "buf" in their names):
1284
+ * KDTreeTsQueryResultsX() to get X-values
1285
+ * KDTreeTsQueryResultsXY() to get X- and Y-values
1286
+ * KDTreeTsQueryResultsTags() to get tag values
1287
+ * KDTreeTsQueryResultsDistances() to get distances
1288
+
1289
+ As indicated by "U" suffix, this function returns unordered results.
1290
+
1291
+ IMPORTANT: kd-tree buffer should be used only with KD-tree object which
1292
+ was used to initialize buffer. Any attempt to use biffer with
1293
+ different object is dangerous - you may get integrity check
1294
+ failure (exception) because sizes of internal arrays do not fit
1295
+ to dimensions of KD-tree structure.
1296
+
1297
+ -- ALGLIB --
1298
+ Copyright 18.03.2016 by Bochkanov Sergey
1299
+ *************************************************************************/
1300
+ ae_int_t kdtreetsqueryrnnu(const kdtree &kdt, kdtreerequestbuffer &buf, const real_1d_array &x, const double r, const bool selfmatch, const xparams _xparams = alglib::xdefault);
1301
+ ae_int_t kdtreetsqueryrnnu(const kdtree &kdt, kdtreerequestbuffer &buf, const real_1d_array &x, const double r, const xparams _xparams = alglib::xdefault);
1302
+
1303
+
1304
+ /*************************************************************************
1305
+ K-NN query: approximate K nearest neighbors
1306
+
1307
+ IMPORTANT: this function can not be used in multithreaded code because it
1308
+ uses internal temporary buffer of kd-tree object, which can not
1309
+ be shared between multiple threads. If you want to perform
1310
+ parallel requests, use function which uses external request
1311
+ buffer: KDTreeTsQueryAKNN() ("Ts" stands for "thread-safe").
1312
+
1313
+ INPUT PARAMETERS
1314
+ KDT - KD-tree
1315
+ X - point, array[0..NX-1].
1316
+ K - number of neighbors to return, K>=1
1317
+ SelfMatch - whether self-matches are allowed:
1318
+ * if True, nearest neighbor may be the point itself
1319
+ (if it exists in original dataset)
1320
+ * if False, then only points with non-zero distance
1321
+ are returned
1322
+ * if not given, considered True
1323
+ Eps - approximation factor, Eps>=0. eps-approximate nearest
1324
+ neighbor is a neighbor whose distance from X is at
1325
+ most (1+eps) times distance of true nearest neighbor.
1326
+
1327
+ RESULT
1328
+ number of actual neighbors found (either K or N, if K>N).
1329
+
1330
+ NOTES
1331
+ significant performance gain may be achieved only when Eps is is on
1332
+ the order of magnitude of 1 or larger.
1333
+
1334
+ This subroutine performs query and stores its result in the internal
1335
+ structures of the KD-tree. You can use following subroutines to obtain
1336
+ these results:
1337
+ * KDTreeQueryResultsX() to get X-values
1338
+ * KDTreeQueryResultsXY() to get X- and Y-values
1339
+ * KDTreeQueryResultsTags() to get tag values
1340
+ * KDTreeQueryResultsDistances() to get distances
1341
+
1342
+ -- ALGLIB --
1343
+ Copyright 28.02.2010 by Bochkanov Sergey
1344
+ *************************************************************************/
1345
+ ae_int_t kdtreequeryaknn(kdtree &kdt, const real_1d_array &x, const ae_int_t k, const bool selfmatch, const double eps, const xparams _xparams = alglib::xdefault);
1346
+ ae_int_t kdtreequeryaknn(kdtree &kdt, const real_1d_array &x, const ae_int_t k, const double eps, const xparams _xparams = alglib::xdefault);
1347
+
1348
+
1349
+ /*************************************************************************
1350
+ K-NN query: approximate K nearest neighbors, using thread-local buffer.
1351
+
1352
+ You can call this function from multiple threads for same kd-tree instance,
1353
+ assuming that different instances of buffer object are passed to different
1354
+ threads.
1355
+
1356
+ INPUT PARAMETERS
1357
+ KDT - KD-tree
1358
+ Buf - request buffer object created for this particular
1359
+ instance of kd-tree structure with kdtreecreaterequestbuffer()
1360
+ function.
1361
+ X - point, array[0..NX-1].
1362
+ K - number of neighbors to return, K>=1
1363
+ SelfMatch - whether self-matches are allowed:
1364
+ * if True, nearest neighbor may be the point itself
1365
+ (if it exists in original dataset)
1366
+ * if False, then only points with non-zero distance
1367
+ are returned
1368
+ * if not given, considered True
1369
+ Eps - approximation factor, Eps>=0. eps-approximate nearest
1370
+ neighbor is a neighbor whose distance from X is at
1371
+ most (1+eps) times distance of true nearest neighbor.
1372
+
1373
+ RESULT
1374
+ number of actual neighbors found (either K or N, if K>N).
1375
+
1376
+ NOTES
1377
+ significant performance gain may be achieved only when Eps is is on
1378
+ the order of magnitude of 1 or larger.
1379
+
1380
+ This subroutine performs query and stores its result in the internal
1381
+ structures of the buffer object. You can use following subroutines to
1382
+ obtain these results (pay attention to "buf" in their names):
1383
+ * KDTreeTsQueryResultsX() to get X-values
1384
+ * KDTreeTsQueryResultsXY() to get X- and Y-values
1385
+ * KDTreeTsQueryResultsTags() to get tag values
1386
+ * KDTreeTsQueryResultsDistances() to get distances
1387
+
1388
+ IMPORTANT: kd-tree buffer should be used only with KD-tree object which
1389
+ was used to initialize buffer. Any attempt to use biffer with
1390
+ different object is dangerous - you may get integrity check
1391
+ failure (exception) because sizes of internal arrays do not fit
1392
+ to dimensions of KD-tree structure.
1393
+
1394
+ -- ALGLIB --
1395
+ Copyright 18.03.2016 by Bochkanov Sergey
1396
+ *************************************************************************/
1397
+ ae_int_t kdtreetsqueryaknn(const kdtree &kdt, kdtreerequestbuffer &buf, const real_1d_array &x, const ae_int_t k, const bool selfmatch, const double eps, const xparams _xparams = alglib::xdefault);
1398
+ ae_int_t kdtreetsqueryaknn(const kdtree &kdt, kdtreerequestbuffer &buf, const real_1d_array &x, const ae_int_t k, const double eps, const xparams _xparams = alglib::xdefault);
1399
+
1400
+
1401
+ /*************************************************************************
1402
+ Box query: all points within user-specified box.
1403
+
1404
+ IMPORTANT: this function can not be used in multithreaded code because it
1405
+ uses internal temporary buffer of kd-tree object, which can not
1406
+ be shared between multiple threads. If you want to perform
1407
+ parallel requests, use function which uses external request
1408
+ buffer: KDTreeTsQueryBox() ("Ts" stands for "thread-safe").
1409
+
1410
+ INPUT PARAMETERS
1411
+ KDT - KD-tree
1412
+ BoxMin - lower bounds, array[0..NX-1].
1413
+ BoxMax - upper bounds, array[0..NX-1].
1414
+
1415
+
1416
+ RESULT
1417
+ number of actual neighbors found (in [0,N]).
1418
+
1419
+ This subroutine performs query and stores its result in the internal
1420
+ structures of the KD-tree. You can use following subroutines to obtain
1421
+ these results:
1422
+ * KDTreeQueryResultsX() to get X-values
1423
+ * KDTreeQueryResultsXY() to get X- and Y-values
1424
+ * KDTreeQueryResultsTags() to get tag values
1425
+ * KDTreeQueryResultsDistances() returns zeros for this request
1426
+
1427
+ NOTE: this particular query returns unordered results, because there is no
1428
+ meaningful way of ordering points. Furthermore, no 'distance' is
1429
+ associated with points - it is either INSIDE or OUTSIDE (so request
1430
+ for distances will return zeros).
1431
+
1432
+ -- ALGLIB --
1433
+ Copyright 14.05.2016 by Bochkanov Sergey
1434
+ *************************************************************************/
1435
+ ae_int_t kdtreequerybox(kdtree &kdt, const real_1d_array &boxmin, const real_1d_array &boxmax, const xparams _xparams = alglib::xdefault);
1436
+
1437
+
1438
+ /*************************************************************************
1439
+ Box query: all points within user-specified box, using thread-local buffer.
1440
+
1441
+ You can call this function from multiple threads for same kd-tree instance,
1442
+ assuming that different instances of buffer object are passed to different
1443
+ threads.
1444
+
1445
+ INPUT PARAMETERS
1446
+ KDT - KD-tree
1447
+ Buf - request buffer object created for this particular
1448
+ instance of kd-tree structure with kdtreecreaterequestbuffer()
1449
+ function.
1450
+ BoxMin - lower bounds, array[0..NX-1].
1451
+ BoxMax - upper bounds, array[0..NX-1].
1452
+
1453
+ RESULT
1454
+ number of actual neighbors found (in [0,N]).
1455
+
1456
+ This subroutine performs query and stores its result in the internal
1457
+ structures of the buffer object. You can use following subroutines to
1458
+ obtain these results (pay attention to "ts" in their names):
1459
+ * KDTreeTsQueryResultsX() to get X-values
1460
+ * KDTreeTsQueryResultsXY() to get X- and Y-values
1461
+ * KDTreeTsQueryResultsTags() to get tag values
1462
+ * KDTreeTsQueryResultsDistances() returns zeros for this query
1463
+
1464
+ NOTE: this particular query returns unordered results, because there is no
1465
+ meaningful way of ordering points. Furthermore, no 'distance' is
1466
+ associated with points - it is either INSIDE or OUTSIDE (so request
1467
+ for distances will return zeros).
1468
+
1469
+ IMPORTANT: kd-tree buffer should be used only with KD-tree object which
1470
+ was used to initialize buffer. Any attempt to use biffer with
1471
+ different object is dangerous - you may get integrity check
1472
+ failure (exception) because sizes of internal arrays do not fit
1473
+ to dimensions of KD-tree structure.
1474
+
1475
+ -- ALGLIB --
1476
+ Copyright 14.05.2016 by Bochkanov Sergey
1477
+ *************************************************************************/
1478
+ ae_int_t kdtreetsquerybox(const kdtree &kdt, kdtreerequestbuffer &buf, const real_1d_array &boxmin, const real_1d_array &boxmax, const xparams _xparams = alglib::xdefault);
1479
+
1480
+
1481
+ /*************************************************************************
1482
+ X-values from last query.
1483
+
1484
+ This function retuns results stored in the internal buffer of kd-tree
1485
+ object. If you performed buffered requests (ones which use instances of
1486
+ kdtreerequestbuffer class), you should call buffered version of this
1487
+ function - kdtreetsqueryresultsx().
1488
+
1489
+ INPUT PARAMETERS
1490
+ KDT - KD-tree
1491
+ X - possibly pre-allocated buffer. If X is too small to store
1492
+ result, it is resized. If size(X) is enough to store
1493
+ result, it is left unchanged.
1494
+
1495
+ OUTPUT PARAMETERS
1496
+ X - rows are filled with X-values
1497
+
1498
+ NOTES
1499
+ 1. points are ordered by distance from the query point (first = closest)
1500
+ 2. if XY is larger than required to store result, only leading part will
1501
+ be overwritten; trailing part will be left unchanged. So if on input
1502
+ XY = [[A,B],[C,D]], and result is [1,2], then on exit we will get
1503
+ XY = [[1,2],[C,D]]. This is done purposely to increase performance; if
1504
+ you want function to resize array according to result size, use
1505
+ function with same name and suffix 'I'.
1506
+
1507
+ SEE ALSO
1508
+ * KDTreeQueryResultsXY() X- and Y-values
1509
+ * KDTreeQueryResultsTags() tag values
1510
+ * KDTreeQueryResultsDistances() distances
1511
+
1512
+ -- ALGLIB --
1513
+ Copyright 28.02.2010 by Bochkanov Sergey
1514
+ *************************************************************************/
1515
+ void kdtreequeryresultsx(const kdtree &kdt, real_2d_array &x, const xparams _xparams = alglib::xdefault);
1516
+
1517
+
1518
+ /*************************************************************************
1519
+ X- and Y-values from last query
1520
+
1521
+ This function retuns results stored in the internal buffer of kd-tree
1522
+ object. If you performed buffered requests (ones which use instances of
1523
+ kdtreerequestbuffer class), you should call buffered version of this
1524
+ function - kdtreetsqueryresultsxy().
1525
+
1526
+ INPUT PARAMETERS
1527
+ KDT - KD-tree
1528
+ XY - possibly pre-allocated buffer. If XY is too small to store
1529
+ result, it is resized. If size(XY) is enough to store
1530
+ result, it is left unchanged.
1531
+
1532
+ OUTPUT PARAMETERS
1533
+ XY - rows are filled with points: first NX columns with
1534
+ X-values, next NY columns - with Y-values.
1535
+
1536
+ NOTES
1537
+ 1. points are ordered by distance from the query point (first = closest)
1538
+ 2. if XY is larger than required to store result, only leading part will
1539
+ be overwritten; trailing part will be left unchanged. So if on input
1540
+ XY = [[A,B],[C,D]], and result is [1,2], then on exit we will get
1541
+ XY = [[1,2],[C,D]]. This is done purposely to increase performance; if
1542
+ you want function to resize array according to result size, use
1543
+ function with same name and suffix 'I'.
1544
+
1545
+ SEE ALSO
1546
+ * KDTreeQueryResultsX() X-values
1547
+ * KDTreeQueryResultsTags() tag values
1548
+ * KDTreeQueryResultsDistances() distances
1549
+
1550
+ -- ALGLIB --
1551
+ Copyright 28.02.2010 by Bochkanov Sergey
1552
+ *************************************************************************/
1553
+ void kdtreequeryresultsxy(const kdtree &kdt, real_2d_array &xy, const xparams _xparams = alglib::xdefault);
1554
+
1555
+
1556
+ /*************************************************************************
1557
+ Tags from last query
1558
+
1559
+ This function retuns results stored in the internal buffer of kd-tree
1560
+ object. If you performed buffered requests (ones which use instances of
1561
+ kdtreerequestbuffer class), you should call buffered version of this
1562
+ function - kdtreetsqueryresultstags().
1563
+
1564
+ INPUT PARAMETERS
1565
+ KDT - KD-tree
1566
+ Tags - possibly pre-allocated buffer. If X is too small to store
1567
+ result, it is resized. If size(X) is enough to store
1568
+ result, it is left unchanged.
1569
+
1570
+ OUTPUT PARAMETERS
1571
+ Tags - filled with tags associated with points,
1572
+ or, when no tags were supplied, with zeros
1573
+
1574
+ NOTES
1575
+ 1. points are ordered by distance from the query point (first = closest)
1576
+ 2. if XY is larger than required to store result, only leading part will
1577
+ be overwritten; trailing part will be left unchanged. So if on input
1578
+ XY = [[A,B],[C,D]], and result is [1,2], then on exit we will get
1579
+ XY = [[1,2],[C,D]]. This is done purposely to increase performance; if
1580
+ you want function to resize array according to result size, use
1581
+ function with same name and suffix 'I'.
1582
+
1583
+ SEE ALSO
1584
+ * KDTreeQueryResultsX() X-values
1585
+ * KDTreeQueryResultsXY() X- and Y-values
1586
+ * KDTreeQueryResultsDistances() distances
1587
+
1588
+ -- ALGLIB --
1589
+ Copyright 28.02.2010 by Bochkanov Sergey
1590
+ *************************************************************************/
1591
+ void kdtreequeryresultstags(const kdtree &kdt, integer_1d_array &tags, const xparams _xparams = alglib::xdefault);
1592
+
1593
+
1594
+ /*************************************************************************
1595
+ Distances from last query
1596
+
1597
+ This function retuns results stored in the internal buffer of kd-tree
1598
+ object. If you performed buffered requests (ones which use instances of
1599
+ kdtreerequestbuffer class), you should call buffered version of this
1600
+ function - kdtreetsqueryresultsdistances().
1601
+
1602
+ INPUT PARAMETERS
1603
+ KDT - KD-tree
1604
+ R - possibly pre-allocated buffer. If X is too small to store
1605
+ result, it is resized. If size(X) is enough to store
1606
+ result, it is left unchanged.
1607
+
1608
+ OUTPUT PARAMETERS
1609
+ R - filled with distances (in corresponding norm)
1610
+
1611
+ NOTES
1612
+ 1. points are ordered by distance from the query point (first = closest)
1613
+ 2. if XY is larger than required to store result, only leading part will
1614
+ be overwritten; trailing part will be left unchanged. So if on input
1615
+ XY = [[A,B],[C,D]], and result is [1,2], then on exit we will get
1616
+ XY = [[1,2],[C,D]]. This is done purposely to increase performance; if
1617
+ you want function to resize array according to result size, use
1618
+ function with same name and suffix 'I'.
1619
+
1620
+ SEE ALSO
1621
+ * KDTreeQueryResultsX() X-values
1622
+ * KDTreeQueryResultsXY() X- and Y-values
1623
+ * KDTreeQueryResultsTags() tag values
1624
+
1625
+ -- ALGLIB --
1626
+ Copyright 28.02.2010 by Bochkanov Sergey
1627
+ *************************************************************************/
1628
+ void kdtreequeryresultsdistances(const kdtree &kdt, real_1d_array &r, const xparams _xparams = alglib::xdefault);
1629
+
1630
+
1631
+ /*************************************************************************
1632
+ X-values from last query associated with kdtreerequestbuffer object.
1633
+
1634
+ INPUT PARAMETERS
1635
+ KDT - KD-tree
1636
+ Buf - request buffer object created for this particular
1637
+ instance of kd-tree structure.
1638
+ X - possibly pre-allocated buffer. If X is too small to store
1639
+ result, it is resized. If size(X) is enough to store
1640
+ result, it is left unchanged.
1641
+
1642
+ OUTPUT PARAMETERS
1643
+ X - rows are filled with X-values
1644
+
1645
+ NOTES
1646
+ 1. points are ordered by distance from the query point (first = closest)
1647
+ 2. if XY is larger than required to store result, only leading part will
1648
+ be overwritten; trailing part will be left unchanged. So if on input
1649
+ XY = [[A,B],[C,D]], and result is [1,2], then on exit we will get
1650
+ XY = [[1,2],[C,D]]. This is done purposely to increase performance; if
1651
+ you want function to resize array according to result size, use
1652
+ function with same name and suffix 'I'.
1653
+
1654
+ SEE ALSO
1655
+ * KDTreeQueryResultsXY() X- and Y-values
1656
+ * KDTreeQueryResultsTags() tag values
1657
+ * KDTreeQueryResultsDistances() distances
1658
+
1659
+ -- ALGLIB --
1660
+ Copyright 28.02.2010 by Bochkanov Sergey
1661
+ *************************************************************************/
1662
+ void kdtreetsqueryresultsx(const kdtree &kdt, const kdtreerequestbuffer &buf, real_2d_array &x, const xparams _xparams = alglib::xdefault);
1663
+
1664
+
1665
+ /*************************************************************************
1666
+ X- and Y-values from last query associated with kdtreerequestbuffer object.
1667
+
1668
+ INPUT PARAMETERS
1669
+ KDT - KD-tree
1670
+ Buf - request buffer object created for this particular
1671
+ instance of kd-tree structure.
1672
+ XY - possibly pre-allocated buffer. If XY is too small to store
1673
+ result, it is resized. If size(XY) is enough to store
1674
+ result, it is left unchanged.
1675
+
1676
+ OUTPUT PARAMETERS
1677
+ XY - rows are filled with points: first NX columns with
1678
+ X-values, next NY columns - with Y-values.
1679
+
1680
+ NOTES
1681
+ 1. points are ordered by distance from the query point (first = closest)
1682
+ 2. if XY is larger than required to store result, only leading part will
1683
+ be overwritten; trailing part will be left unchanged. So if on input
1684
+ XY = [[A,B],[C,D]], and result is [1,2], then on exit we will get
1685
+ XY = [[1,2],[C,D]]. This is done purposely to increase performance; if
1686
+ you want function to resize array according to result size, use
1687
+ function with same name and suffix 'I'.
1688
+
1689
+ SEE ALSO
1690
+ * KDTreeQueryResultsX() X-values
1691
+ * KDTreeQueryResultsTags() tag values
1692
+ * KDTreeQueryResultsDistances() distances
1693
+
1694
+ -- ALGLIB --
1695
+ Copyright 28.02.2010 by Bochkanov Sergey
1696
+ *************************************************************************/
1697
+ void kdtreetsqueryresultsxy(const kdtree &kdt, const kdtreerequestbuffer &buf, real_2d_array &xy, const xparams _xparams = alglib::xdefault);
1698
+
1699
+
1700
+ /*************************************************************************
1701
+ Tags from last query associated with kdtreerequestbuffer object.
1702
+
1703
+ This function retuns results stored in the internal buffer of kd-tree
1704
+ object. If you performed buffered requests (ones which use instances of
1705
+ kdtreerequestbuffer class), you should call buffered version of this
1706
+ function - KDTreeTsqueryresultstags().
1707
+
1708
+ INPUT PARAMETERS
1709
+ KDT - KD-tree
1710
+ Buf - request buffer object created for this particular
1711
+ instance of kd-tree structure.
1712
+ Tags - possibly pre-allocated buffer. If X is too small to store
1713
+ result, it is resized. If size(X) is enough to store
1714
+ result, it is left unchanged.
1715
+
1716
+ OUTPUT PARAMETERS
1717
+ Tags - filled with tags associated with points,
1718
+ or, when no tags were supplied, with zeros
1719
+
1720
+ NOTES
1721
+ 1. points are ordered by distance from the query point (first = closest)
1722
+ 2. if XY is larger than required to store result, only leading part will
1723
+ be overwritten; trailing part will be left unchanged. So if on input
1724
+ XY = [[A,B],[C,D]], and result is [1,2], then on exit we will get
1725
+ XY = [[1,2],[C,D]]. This is done purposely to increase performance; if
1726
+ you want function to resize array according to result size, use
1727
+ function with same name and suffix 'I'.
1728
+
1729
+ SEE ALSO
1730
+ * KDTreeQueryResultsX() X-values
1731
+ * KDTreeQueryResultsXY() X- and Y-values
1732
+ * KDTreeQueryResultsDistances() distances
1733
+
1734
+ -- ALGLIB --
1735
+ Copyright 28.02.2010 by Bochkanov Sergey
1736
+ *************************************************************************/
1737
+ void kdtreetsqueryresultstags(const kdtree &kdt, const kdtreerequestbuffer &buf, integer_1d_array &tags, const xparams _xparams = alglib::xdefault);
1738
+
1739
+
1740
+ /*************************************************************************
1741
+ Distances from last query associated with kdtreerequestbuffer object.
1742
+
1743
+ This function retuns results stored in the internal buffer of kd-tree
1744
+ object. If you performed buffered requests (ones which use instances of
1745
+ kdtreerequestbuffer class), you should call buffered version of this
1746
+ function - KDTreeTsqueryresultsdistances().
1747
+
1748
+ INPUT PARAMETERS
1749
+ KDT - KD-tree
1750
+ Buf - request buffer object created for this particular
1751
+ instance of kd-tree structure.
1752
+ R - possibly pre-allocated buffer. If X is too small to store
1753
+ result, it is resized. If size(X) is enough to store
1754
+ result, it is left unchanged.
1755
+
1756
+ OUTPUT PARAMETERS
1757
+ R - filled with distances (in corresponding norm)
1758
+
1759
+ NOTES
1760
+ 1. points are ordered by distance from the query point (first = closest)
1761
+ 2. if XY is larger than required to store result, only leading part will
1762
+ be overwritten; trailing part will be left unchanged. So if on input
1763
+ XY = [[A,B],[C,D]], and result is [1,2], then on exit we will get
1764
+ XY = [[1,2],[C,D]]. This is done purposely to increase performance; if
1765
+ you want function to resize array according to result size, use
1766
+ function with same name and suffix 'I'.
1767
+
1768
+ SEE ALSO
1769
+ * KDTreeQueryResultsX() X-values
1770
+ * KDTreeQueryResultsXY() X- and Y-values
1771
+ * KDTreeQueryResultsTags() tag values
1772
+
1773
+ -- ALGLIB --
1774
+ Copyright 28.02.2010 by Bochkanov Sergey
1775
+ *************************************************************************/
1776
+ void kdtreetsqueryresultsdistances(const kdtree &kdt, const kdtreerequestbuffer &buf, real_1d_array &r, const xparams _xparams = alglib::xdefault);
1777
+
1778
+
1779
+ /*************************************************************************
1780
+ X-values from last query; 'interactive' variant for languages like Python
1781
+ which support constructs like "X = KDTreeQueryResultsXI(KDT)" and
1782
+ interactive mode of interpreter.
1783
+
1784
+ This function allocates new array on each call, so it is significantly
1785
+ slower than its 'non-interactive' counterpart, but it is more convenient
1786
+ when you call it from command line.
1787
+
1788
+ -- ALGLIB --
1789
+ Copyright 28.02.2010 by Bochkanov Sergey
1790
+ *************************************************************************/
1791
+ void kdtreequeryresultsxi(const kdtree &kdt, real_2d_array &x, const xparams _xparams = alglib::xdefault);
1792
+
1793
+
1794
+ /*************************************************************************
1795
+ XY-values from last query; 'interactive' variant for languages like Python
1796
+ which support constructs like "XY = KDTreeQueryResultsXYI(KDT)" and
1797
+ interactive mode of interpreter.
1798
+
1799
+ This function allocates new array on each call, so it is significantly
1800
+ slower than its 'non-interactive' counterpart, but it is more convenient
1801
+ when you call it from command line.
1802
+
1803
+ -- ALGLIB --
1804
+ Copyright 28.02.2010 by Bochkanov Sergey
1805
+ *************************************************************************/
1806
+ void kdtreequeryresultsxyi(const kdtree &kdt, real_2d_array &xy, const xparams _xparams = alglib::xdefault);
1807
+
1808
+
1809
+ /*************************************************************************
1810
+ Tags from last query; 'interactive' variant for languages like Python
1811
+ which support constructs like "Tags = KDTreeQueryResultsTagsI(KDT)" and
1812
+ interactive mode of interpreter.
1813
+
1814
+ This function allocates new array on each call, so it is significantly
1815
+ slower than its 'non-interactive' counterpart, but it is more convenient
1816
+ when you call it from command line.
1817
+
1818
+ -- ALGLIB --
1819
+ Copyright 28.02.2010 by Bochkanov Sergey
1820
+ *************************************************************************/
1821
+ void kdtreequeryresultstagsi(const kdtree &kdt, integer_1d_array &tags, const xparams _xparams = alglib::xdefault);
1822
+
1823
+
1824
+ /*************************************************************************
1825
+ Distances from last query; 'interactive' variant for languages like Python
1826
+ which support constructs like "R = KDTreeQueryResultsDistancesI(KDT)"
1827
+ and interactive mode of interpreter.
1828
+
1829
+ This function allocates new array on each call, so it is significantly
1830
+ slower than its 'non-interactive' counterpart, but it is more convenient
1831
+ when you call it from command line.
1832
+
1833
+ -- ALGLIB --
1834
+ Copyright 28.02.2010 by Bochkanov Sergey
1835
+ *************************************************************************/
1836
+ void kdtreequeryresultsdistancesi(const kdtree &kdt, real_1d_array &r, const xparams _xparams = alglib::xdefault);
1837
+ #endif
1838
+ }
1839
+
1840
+ /////////////////////////////////////////////////////////////////////////
1841
+ //
1842
+ // THIS SECTION CONTAINS COMPUTATIONAL CORE DECLARATIONS (FUNCTIONS)
1843
+ //
1844
+ /////////////////////////////////////////////////////////////////////////
1845
+ namespace alglib_impl
1846
+ {
1847
+ #if defined(AE_COMPILE_XDEBUG) || !defined(AE_PARTIAL_BUILD)
1848
+ void xdebuginitrecord1(xdebugrecord1* rec1, ae_state *_state);
1849
+ void xdebugupdaterecord1(xdebugrecord1* rec1, ae_state *_state);
1850
+ ae_int_t xdebugb1count(/* Boolean */ const ae_vector* a, ae_state *_state);
1851
+ void xdebugb1not(/* Boolean */ ae_vector* a, ae_state *_state);
1852
+ void xdebugb1appendcopy(/* Boolean */ ae_vector* a, ae_state *_state);
1853
+ void xdebugb1outeven(ae_int_t n,
1854
+ /* Boolean */ ae_vector* a,
1855
+ ae_state *_state);
1856
+ ae_int_t xdebugi1sum(/* Integer */ const ae_vector* a, ae_state *_state);
1857
+ void xdebugi1neg(/* Integer */ ae_vector* a, ae_state *_state);
1858
+ void xdebugi1appendcopy(/* Integer */ ae_vector* a, ae_state *_state);
1859
+ void xdebugi1outeven(ae_int_t n,
1860
+ /* Integer */ ae_vector* a,
1861
+ ae_state *_state);
1862
+ double xdebugr1sum(/* Real */ const ae_vector* a, ae_state *_state);
1863
+ double xdebugr1internalcopyandsum(/* Real */ const ae_vector* _a,
1864
+ ae_state *_state);
1865
+ void xdebugr1neg(/* Real */ ae_vector* a, ae_state *_state);
1866
+ void xdebugr1appendcopy(/* Real */ ae_vector* a, ae_state *_state);
1867
+ void xdebugr1outeven(ae_int_t n,
1868
+ /* Real */ ae_vector* a,
1869
+ ae_state *_state);
1870
+ ae_complex xdebugc1sum(/* Complex */ const ae_vector* a, ae_state *_state);
1871
+ void xdebugc1neg(/* Complex */ ae_vector* a, ae_state *_state);
1872
+ void xdebugc1appendcopy(/* Complex */ ae_vector* a, ae_state *_state);
1873
+ void xdebugc1outeven(ae_int_t n,
1874
+ /* Complex */ ae_vector* a,
1875
+ ae_state *_state);
1876
+ ae_int_t xdebugb2count(/* Boolean */ const ae_matrix* a, ae_state *_state);
1877
+ void xdebugb2not(/* Boolean */ ae_matrix* a, ae_state *_state);
1878
+ void xdebugb2transpose(/* Boolean */ ae_matrix* a, ae_state *_state);
1879
+ void xdebugb2outsin(ae_int_t m,
1880
+ ae_int_t n,
1881
+ /* Boolean */ ae_matrix* a,
1882
+ ae_state *_state);
1883
+ ae_int_t xdebugi2sum(/* Integer */ const ae_matrix* a, ae_state *_state);
1884
+ void xdebugi2neg(/* Integer */ ae_matrix* a, ae_state *_state);
1885
+ void xdebugi2transpose(/* Integer */ ae_matrix* a, ae_state *_state);
1886
+ void xdebugi2outsin(ae_int_t m,
1887
+ ae_int_t n,
1888
+ /* Integer */ ae_matrix* a,
1889
+ ae_state *_state);
1890
+ double xdebugr2sum(/* Real */ const ae_matrix* a, ae_state *_state);
1891
+ double xdebugr2internalcopyandsum(/* Real */ const ae_matrix* _a,
1892
+ ae_state *_state);
1893
+ void xdebugr2neg(/* Real */ ae_matrix* a, ae_state *_state);
1894
+ void xdebugr2transpose(/* Real */ ae_matrix* a, ae_state *_state);
1895
+ void xdebugr2outsin(ae_int_t m,
1896
+ ae_int_t n,
1897
+ /* Real */ ae_matrix* a,
1898
+ ae_state *_state);
1899
+ ae_complex xdebugc2sum(/* Complex */ const ae_matrix* a, ae_state *_state);
1900
+ void xdebugc2neg(/* Complex */ ae_matrix* a, ae_state *_state);
1901
+ void xdebugc2transpose(/* Complex */ ae_matrix* a, ae_state *_state);
1902
+ void xdebugc2outsincos(ae_int_t m,
1903
+ ae_int_t n,
1904
+ /* Complex */ ae_matrix* a,
1905
+ ae_state *_state);
1906
+ double xdebugmaskedbiasedproductsum(ae_int_t m,
1907
+ ae_int_t n,
1908
+ /* Real */ const ae_matrix* a,
1909
+ /* Real */ const ae_matrix* b,
1910
+ /* Boolean */ const ae_matrix* c,
1911
+ ae_state *_state);
1912
+ void _xdebugrecord1_init(void* _p, ae_state *_state, ae_bool make_automatic);
1913
+ void _xdebugrecord1_init_copy(void* _dst, const void* _src, ae_state *_state, ae_bool make_automatic);
1914
+ void _xdebugrecord1_clear(void* _p);
1915
+ void _xdebugrecord1_destroy(void* _p);
1916
+ #endif
1917
+ #if defined(AE_COMPILE_HQRND) || !defined(AE_PARTIAL_BUILD)
1918
+ void hqrndrandomize(hqrndstate* state, ae_state *_state);
1919
+ void hqrndseed(ae_int_t s1,
1920
+ ae_int_t s2,
1921
+ hqrndstate* state,
1922
+ ae_state *_state);
1923
+ double hqrnduniformr(hqrndstate* state, ae_state *_state);
1924
+ ae_int_t hqrnduniformi(hqrndstate* state, ae_int_t n, ae_state *_state);
1925
+ double hqrndnormal(hqrndstate* state, ae_state *_state);
1926
+ void hqrndnormalv(hqrndstate* state,
1927
+ ae_int_t n,
1928
+ /* Real */ ae_vector* x,
1929
+ ae_state *_state);
1930
+ void hqrndnormalm(hqrndstate* state,
1931
+ ae_int_t m,
1932
+ ae_int_t n,
1933
+ /* Real */ ae_matrix* x,
1934
+ ae_state *_state);
1935
+ void hqrndunit2(hqrndstate* state, double* x, double* y, ae_state *_state);
1936
+ void hqrndnormal2(hqrndstate* state,
1937
+ double* x1,
1938
+ double* x2,
1939
+ ae_state *_state);
1940
+ double hqrndexponential(hqrndstate* state,
1941
+ double lambdav,
1942
+ ae_state *_state);
1943
+ ae_int_t hqrndgetmax(ae_state *_state);
1944
+ ae_int_t hqrndintegerbase(hqrndstate* state, ae_state *_state);
1945
+ double hqrnddiscrete(hqrndstate* state,
1946
+ /* Real */ const ae_vector* x,
1947
+ ae_int_t n,
1948
+ ae_state *_state);
1949
+ double hqrndcontinuous(hqrndstate* state,
1950
+ /* Real */ const ae_vector* x,
1951
+ ae_int_t n,
1952
+ ae_state *_state);
1953
+ void _hqrndstate_init(void* _p, ae_state *_state, ae_bool make_automatic);
1954
+ void _hqrndstate_init_copy(void* _dst, const void* _src, ae_state *_state, ae_bool make_automatic);
1955
+ void _hqrndstate_clear(void* _p);
1956
+ void _hqrndstate_destroy(void* _p);
1957
+ #endif
1958
+ #if defined(AE_COMPILE_NEARESTNEIGHBOR) || !defined(AE_PARTIAL_BUILD)
1959
+ void kdtreebuild(/* Real */ const ae_matrix* xy,
1960
+ ae_int_t n,
1961
+ ae_int_t nx,
1962
+ ae_int_t ny,
1963
+ ae_int_t normtype,
1964
+ kdtree* kdt,
1965
+ ae_state *_state);
1966
+ void kdtreebuildtagged(/* Real */ const ae_matrix* xy,
1967
+ /* Integer */ const ae_vector* tags,
1968
+ ae_int_t n,
1969
+ ae_int_t nx,
1970
+ ae_int_t ny,
1971
+ ae_int_t normtype,
1972
+ kdtree* kdt,
1973
+ ae_state *_state);
1974
+ void kdtreecreaterequestbuffer(const kdtree* kdt,
1975
+ kdtreerequestbuffer* buf,
1976
+ ae_state *_state);
1977
+ ae_int_t kdtreequeryknn(kdtree* kdt,
1978
+ /* Real */ const ae_vector* x,
1979
+ ae_int_t k,
1980
+ ae_bool selfmatch,
1981
+ ae_state *_state);
1982
+ ae_int_t kdtreetsqueryknn(const kdtree* kdt,
1983
+ kdtreerequestbuffer* buf,
1984
+ /* Real */ const ae_vector* x,
1985
+ ae_int_t k,
1986
+ ae_bool selfmatch,
1987
+ ae_state *_state);
1988
+ ae_int_t kdtreequeryrnn(kdtree* kdt,
1989
+ /* Real */ const ae_vector* x,
1990
+ double r,
1991
+ ae_bool selfmatch,
1992
+ ae_state *_state);
1993
+ ae_int_t kdtreequeryrnnu(kdtree* kdt,
1994
+ /* Real */ const ae_vector* x,
1995
+ double r,
1996
+ ae_bool selfmatch,
1997
+ ae_state *_state);
1998
+ ae_int_t kdtreetsqueryrnn(const kdtree* kdt,
1999
+ kdtreerequestbuffer* buf,
2000
+ /* Real */ const ae_vector* x,
2001
+ double r,
2002
+ ae_bool selfmatch,
2003
+ ae_state *_state);
2004
+ ae_int_t kdtreetsqueryrnnu(const kdtree* kdt,
2005
+ kdtreerequestbuffer* buf,
2006
+ /* Real */ const ae_vector* x,
2007
+ double r,
2008
+ ae_bool selfmatch,
2009
+ ae_state *_state);
2010
+ ae_int_t kdtreequeryaknn(kdtree* kdt,
2011
+ /* Real */ const ae_vector* x,
2012
+ ae_int_t k,
2013
+ ae_bool selfmatch,
2014
+ double eps,
2015
+ ae_state *_state);
2016
+ ae_int_t kdtreetsqueryaknn(const kdtree* kdt,
2017
+ kdtreerequestbuffer* buf,
2018
+ /* Real */ const ae_vector* x,
2019
+ ae_int_t k,
2020
+ ae_bool selfmatch,
2021
+ double eps,
2022
+ ae_state *_state);
2023
+ ae_int_t kdtreequerybox(kdtree* kdt,
2024
+ /* Real */ const ae_vector* boxmin,
2025
+ /* Real */ const ae_vector* boxmax,
2026
+ ae_state *_state);
2027
+ ae_int_t kdtreetsquerybox(const kdtree* kdt,
2028
+ kdtreerequestbuffer* buf,
2029
+ /* Real */ const ae_vector* boxmin,
2030
+ /* Real */ const ae_vector* boxmax,
2031
+ ae_state *_state);
2032
+ void kdtreequeryresultsx(const kdtree* kdt,
2033
+ /* Real */ ae_matrix* x,
2034
+ ae_state *_state);
2035
+ void kdtreequeryresultsxy(const kdtree* kdt,
2036
+ /* Real */ ae_matrix* xy,
2037
+ ae_state *_state);
2038
+ void kdtreequeryresultstags(const kdtree* kdt,
2039
+ /* Integer */ ae_vector* tags,
2040
+ ae_state *_state);
2041
+ void kdtreequeryresultsdistances(const kdtree* kdt,
2042
+ /* Real */ ae_vector* r,
2043
+ ae_state *_state);
2044
+ void kdtreetsqueryresultsx(const kdtree* kdt,
2045
+ const kdtreerequestbuffer* buf,
2046
+ /* Real */ ae_matrix* x,
2047
+ ae_state *_state);
2048
+ void kdtreetsqueryresultsxy(const kdtree* kdt,
2049
+ const kdtreerequestbuffer* buf,
2050
+ /* Real */ ae_matrix* xy,
2051
+ ae_state *_state);
2052
+ void kdtreetsqueryresultstags(const kdtree* kdt,
2053
+ const kdtreerequestbuffer* buf,
2054
+ /* Integer */ ae_vector* tags,
2055
+ ae_state *_state);
2056
+ void kdtreetsqueryresultsdistances(const kdtree* kdt,
2057
+ const kdtreerequestbuffer* buf,
2058
+ /* Real */ ae_vector* r,
2059
+ ae_state *_state);
2060
+ void kdtreequeryresultsxi(const kdtree* kdt,
2061
+ /* Real */ ae_matrix* x,
2062
+ ae_state *_state);
2063
+ void kdtreequeryresultsxyi(const kdtree* kdt,
2064
+ /* Real */ ae_matrix* xy,
2065
+ ae_state *_state);
2066
+ void kdtreequeryresultstagsi(const kdtree* kdt,
2067
+ /* Integer */ ae_vector* tags,
2068
+ ae_state *_state);
2069
+ void kdtreequeryresultsdistancesi(const kdtree* kdt,
2070
+ /* Real */ ae_vector* r,
2071
+ ae_state *_state);
2072
+ void kdtreeexplorebox(const kdtree* kdt,
2073
+ /* Real */ ae_vector* boxmin,
2074
+ /* Real */ ae_vector* boxmax,
2075
+ ae_state *_state);
2076
+ void kdtreeexplorenodetype(const kdtree* kdt,
2077
+ ae_int_t node,
2078
+ ae_int_t* nodetype,
2079
+ ae_state *_state);
2080
+ void kdtreeexploreleaf(const kdtree* kdt,
2081
+ ae_int_t node,
2082
+ /* Real */ ae_matrix* xy,
2083
+ ae_int_t* k,
2084
+ ae_state *_state);
2085
+ void kdtreeexploresplit(const kdtree* kdt,
2086
+ ae_int_t node,
2087
+ ae_int_t* d,
2088
+ double* s,
2089
+ ae_int_t* nodele,
2090
+ ae_int_t* nodege,
2091
+ ae_state *_state);
2092
+ void kdtreealloc(ae_serializer* s, const kdtree* tree, ae_state *_state);
2093
+ void kdtreeserialize(ae_serializer* s,
2094
+ const kdtree* tree,
2095
+ ae_state *_state);
2096
+ void kdtreeunserialize(ae_serializer* s, kdtree* tree, ae_state *_state);
2097
+ double kdtreeapproxrnnquerycost(kdtree* kdt, double r, ae_state *_state);
2098
+ double kdtreetsapproxrnnquerycost(const kdtree* kdt,
2099
+ kdtreerequestbuffer* buf,
2100
+ double r,
2101
+ ae_state *_state);
2102
+ void _kdtreerequestbuffer_init(void* _p, ae_state *_state, ae_bool make_automatic);
2103
+ void _kdtreerequestbuffer_init_copy(void* _dst, const void* _src, ae_state *_state, ae_bool make_automatic);
2104
+ void _kdtreerequestbuffer_clear(void* _p);
2105
+ void _kdtreerequestbuffer_destroy(void* _p);
2106
+ void _kdtree_init(void* _p, ae_state *_state, ae_bool make_automatic);
2107
+ void _kdtree_init_copy(void* _dst, const void* _src, ae_state *_state, ae_bool make_automatic);
2108
+ void _kdtree_clear(void* _p);
2109
+ void _kdtree_destroy(void* _p);
2110
+ #endif
2111
+
2112
+ }
2113
+ #endif
2114
+