alglib4 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+