MRArbGrad 4.1.0__tar.gz → 4.1.1__tar.gz
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.
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1/MRArbGrad.egg-info}/PKG-INFO +1 -1
- {mrarbgrad-4.1.0/MRArbGrad.egg-info → mrarbgrad-4.1.1}/PKG-INFO +1 -1
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/Function.py +32 -4
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/__init__.py +1 -1
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/ext/main.cpp +114 -59
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/ext/utility/v3.cpp +11 -10
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/pyproject.toml +1 -1
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/setup.py +0 -2
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/LICENSE +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/MANIFEST.in +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/MRArbGrad.egg-info/SOURCES.txt +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/MRArbGrad.egg-info/dependency_links.txt +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/MRArbGrad.egg-info/requires.txt +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/MRArbGrad.egg-info/top_level.txt +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/README.md +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/example/example_BuiltInTraj.py +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/example/example_ExternalFunction2D.py +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/example/example_ExternalSamples2D.py +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/example/example_ExternalSamples3D.py +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/Utility.py +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/ext/mag/Mag.cpp +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/ext/mag/Mag.h +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/ext/traj/Cones.h +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/ext/traj/MrTraj.h +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/ext/traj/MrTraj_2D.h +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/ext/traj/Rosette.h +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/ext/traj/Seiffert.h +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/ext/traj/Shell3d.h +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/ext/traj/Spiral.h +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/ext/traj/TrajFunc.h +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/ext/traj/VDSpiral.h +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/ext/traj/Yarnball.h +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/ext/utility/Intp.h +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/ext/utility/LinIntp.h +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/ext/utility/SplineIntp.h +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/ext/utility/global.cpp +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/ext/utility/global.h +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/ext/utility/v3.h +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/trajfunc/__init__.py +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/mrarbgrad_src/trajfunc/main.py +0 -0
- {mrarbgrad-4.1.0 → mrarbgrad-4.1.1}/setup.cfg +0 -0
|
@@ -377,9 +377,23 @@ def setMagGradRep(x): ext.setMagGradRep(x)
|
|
|
377
377
|
def setMagTrajRep(x): ext.setMagTrajRep(x)
|
|
378
378
|
def setDbgPrint(x): ext.setDbgPrint(x)
|
|
379
379
|
|
|
380
|
-
def
|
|
380
|
+
def saveF64(hdr:str, bin:str, arr:NDArray) -> bool:
|
|
381
381
|
"""
|
|
382
|
-
|
|
382
|
+
save vector file (float64)
|
|
383
|
+
|
|
384
|
+
Args:
|
|
385
|
+
hdr (str): header (hdr) file path
|
|
386
|
+
bin (str): bin file path
|
|
387
|
+
arr (NDarray): array to be saved
|
|
388
|
+
|
|
389
|
+
Returns:
|
|
390
|
+
bool: True for success
|
|
391
|
+
"""
|
|
392
|
+
return ext.saveF64(str(hdr), str(bin), arr)
|
|
393
|
+
|
|
394
|
+
def loadF64(hdr:str, bin:str) -> list[NDArray]|None:
|
|
395
|
+
"""
|
|
396
|
+
load vector file (float64)
|
|
383
397
|
|
|
384
398
|
Args:
|
|
385
399
|
hdr (str): header (hdr) file path
|
|
@@ -390,9 +404,23 @@ def loadF64(hdr:str, bin:str) -> list[NDArray]:
|
|
|
390
404
|
"""
|
|
391
405
|
return ext.loadF64(str(hdr), str(bin))
|
|
392
406
|
|
|
393
|
-
def
|
|
407
|
+
def saveF32(hdr:str, bin:str, arr:NDArray) -> bool:
|
|
408
|
+
"""
|
|
409
|
+
save vector file (float32)
|
|
410
|
+
|
|
411
|
+
Args:
|
|
412
|
+
hdr (str): header (hdr) file path
|
|
413
|
+
bin (str): bin file path
|
|
414
|
+
arr (NDarray): array to be saved
|
|
415
|
+
|
|
416
|
+
Returns:
|
|
417
|
+
bool: True for success
|
|
418
|
+
"""
|
|
419
|
+
return ext.saveF32(str(hdr), str(bin), arr)
|
|
420
|
+
|
|
421
|
+
def loadF32(hdr:str, bin:str) -> list[NDArray]|None:
|
|
394
422
|
"""
|
|
395
|
-
load
|
|
423
|
+
load vector file (float32)
|
|
396
424
|
|
|
397
425
|
Args:
|
|
398
426
|
hdr (str): header (hdr) file path
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from .Function import calGrad4ExFunc, calGrad4ExSamp
|
|
2
2
|
from .Function import getG_Cones, getG_Rosette, getG_Rosette_Trad, getG_Seiffert, getG_Shell3d, getG_Spiral, getG_VDSpiral, getG_VDSpiral_RT, getG_Yarnball, getG_Yarnball_RT
|
|
3
|
-
from .Function import setSolverMtg, setTrajRev, setGoldAng, setShuf, setMaxG0, setMaxG1, setMagOverSamp, setMagSFS, setMagGradRep, setMagTrajRep, setDbgPrint, loadF64, loadF32
|
|
3
|
+
from .Function import setSolverMtg, setTrajRev, setGoldAng, setShuf, setMaxG0, setMaxG1, setMagOverSamp, setMagSFS, setMagGradRep, setMagTrajRep, setDbgPrint, saveF64, loadF64, saveF32, loadF32
|
|
4
4
|
from .Utility import _calDiaphony, rotate, _calJacElip, _calCompElipInt, _calSphFibPt, cvtGrad2Traj, getGoldang, getGoldrat, rand3d, gradClip
|
|
5
5
|
|
|
6
6
|
from . import trajfunc
|
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
#include "traj/Cones.h"
|
|
18
18
|
#include "utility/SplineIntp.h"
|
|
19
19
|
|
|
20
|
+
typedef std::list<vv3> lvv3;
|
|
21
|
+
|
|
20
22
|
bool gMain_enTrajRev (0);
|
|
21
23
|
bool gMain_enGoldAng (0);
|
|
22
24
|
bool gMain_enShuffle (0);
|
|
@@ -133,14 +135,9 @@ bool cvtNpa2Vf64(PyObject* pNumpyArray, vf64* pvf64Out)
|
|
|
133
135
|
return true;
|
|
134
136
|
}
|
|
135
137
|
|
|
136
|
-
bool inline
|
|
138
|
+
bool inline chkNarg(i64 nArg, i64 nArgExp)
|
|
137
139
|
{
|
|
138
|
-
|
|
139
|
-
{
|
|
140
|
-
printf("wrong num. of arg, narg=%ld, %ld expected\n", (long)nArg, (long)nArgExp);
|
|
141
|
-
abort();
|
|
142
|
-
return false;
|
|
143
|
-
}
|
|
140
|
+
ASSERT (nArg == nArgExp);
|
|
144
141
|
return true;
|
|
145
142
|
}
|
|
146
143
|
|
|
@@ -187,18 +184,13 @@ public:
|
|
|
187
184
|
PyObject* _pPyObj_v3 = pPyObj_v3;
|
|
188
185
|
pPyObj_v3 = PyArray_FROM_OTF(pPyObj_v3, NPY_FLOAT64, NPY_ARRAY_CARRAY);
|
|
189
186
|
Py_DECREF(_pPyObj_v3);
|
|
190
|
-
|
|
191
|
-
{
|
|
192
|
-
PyErr_SetString(PyExc_RuntimeError, "the return value of getK / getDkDp / getD2kDp2 must be size-3.\n");
|
|
193
|
-
PyErr_PrintEx(-1);
|
|
194
|
-
std::abort();
|
|
195
|
-
return false;
|
|
196
|
-
}
|
|
187
|
+
ASSERT (PyArray_SIZE((PyArrayObject*)pPyObj_v3) == 3);
|
|
197
188
|
|
|
198
189
|
k->x = *(f64*)PyArray_GETPTR1((PyArrayObject*)pPyObj_v3, 0);
|
|
199
190
|
k->y = *(f64*)PyArray_GETPTR1((PyArrayObject*)pPyObj_v3, 1);
|
|
200
191
|
k->z = *(f64*)PyArray_GETPTR1((PyArrayObject*)pPyObj_v3, 2);
|
|
201
|
-
|
|
192
|
+
|
|
193
|
+
Py_DECREF(pPyObj_v3);
|
|
202
194
|
return true;
|
|
203
195
|
}
|
|
204
196
|
|
|
@@ -215,18 +207,13 @@ public:
|
|
|
215
207
|
PyObject* _pPyObj_v3 = pPyObj_v3;
|
|
216
208
|
pPyObj_v3 = PyArray_FROM_OTF(pPyObj_v3, NPY_FLOAT64, NPY_ARRAY_CARRAY);
|
|
217
209
|
Py_DECREF(_pPyObj_v3);
|
|
218
|
-
|
|
219
|
-
{
|
|
220
|
-
PyErr_SetString(PyExc_RuntimeError, "the return value of getK / getDkDp / getD2kDp2 must be size-3.\n");
|
|
221
|
-
PyErr_PrintEx(-1);
|
|
222
|
-
std::abort();
|
|
223
|
-
return false;
|
|
224
|
-
}
|
|
210
|
+
ASSERT (PyArray_SIZE((PyArrayObject*)pPyObj_v3) == 3);
|
|
225
211
|
|
|
226
212
|
k->x = *(f64*)PyArray_GETPTR1((PyArrayObject*)pPyObj_v3, 0);
|
|
227
213
|
k->y = *(f64*)PyArray_GETPTR1((PyArrayObject*)pPyObj_v3, 1);
|
|
228
214
|
k->z = *(f64*)PyArray_GETPTR1((PyArrayObject*)pPyObj_v3, 2);
|
|
229
215
|
|
|
216
|
+
Py_DECREF(pPyObj_v3);
|
|
230
217
|
return true;
|
|
231
218
|
}
|
|
232
219
|
|
|
@@ -243,18 +230,13 @@ public:
|
|
|
243
230
|
PyObject* _pPyObj_v3 = pPyObj_v3;
|
|
244
231
|
pPyObj_v3 = PyArray_FROM_OTF(pPyObj_v3, NPY_FLOAT64, NPY_ARRAY_CARRAY);
|
|
245
232
|
Py_DECREF(_pPyObj_v3);
|
|
246
|
-
|
|
247
|
-
{
|
|
248
|
-
PyErr_SetString(PyExc_RuntimeError, "the return value of getK / getDkDp / getD2kDp2 must be size-3.\n");
|
|
249
|
-
PyErr_PrintEx(-1);
|
|
250
|
-
std::abort();
|
|
251
|
-
return false;
|
|
252
|
-
}
|
|
233
|
+
ASSERT (PyArray_SIZE((PyArrayObject*)pPyObj_v3) != 3);
|
|
253
234
|
|
|
254
235
|
k->x = *(f64*)PyArray_GETPTR1((PyArrayObject*)pPyObj_v3, 0);
|
|
255
236
|
k->y = *(f64*)PyArray_GETPTR1((PyArrayObject*)pPyObj_v3, 1);
|
|
256
237
|
k->z = *(f64*)PyArray_GETPTR1((PyArrayObject*)pPyObj_v3, 2);
|
|
257
238
|
|
|
239
|
+
Py_DECREF(pPyObj_v3);
|
|
258
240
|
return true;
|
|
259
241
|
}
|
|
260
242
|
protected:
|
|
@@ -325,7 +307,7 @@ private:
|
|
|
325
307
|
|
|
326
308
|
PyObject* calGrad4ExFunc(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
327
309
|
{
|
|
328
|
-
|
|
310
|
+
chkNarg(narg, 10);
|
|
329
311
|
|
|
330
312
|
MrTraj::GeoPara objGeoPara;
|
|
331
313
|
MrTraj::GradPara objGradPara;
|
|
@@ -353,7 +335,7 @@ PyObject* calGrad4ExSamp(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
353
335
|
{
|
|
354
336
|
try
|
|
355
337
|
{
|
|
356
|
-
|
|
338
|
+
chkNarg(narg, 6);
|
|
357
339
|
|
|
358
340
|
MrTraj::GeoPara objGeoPara;
|
|
359
341
|
MrTraj::GradPara objGradPara;
|
|
@@ -410,7 +392,7 @@ bool getG(MrTraj* pmt, vv3* pvv3M0PE, vvv3* pvvv3GRO)
|
|
|
410
392
|
|
|
411
393
|
PyObject* getG_Spiral(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
412
394
|
{
|
|
413
|
-
|
|
395
|
+
chkNarg(narg, 7);
|
|
414
396
|
|
|
415
397
|
MrTraj::GeoPara objGeoPara;
|
|
416
398
|
MrTraj::GradPara objGradPara;
|
|
@@ -430,7 +412,7 @@ PyObject* getG_Spiral(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
430
412
|
|
|
431
413
|
PyObject* getG_VDSpiral(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
432
414
|
{
|
|
433
|
-
|
|
415
|
+
chkNarg(narg, 8);
|
|
434
416
|
|
|
435
417
|
MrTraj::GeoPara objGeoPara;
|
|
436
418
|
MrTraj::GradPara objGradPara;
|
|
@@ -451,7 +433,7 @@ PyObject* getG_VDSpiral(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
451
433
|
|
|
452
434
|
PyObject* getG_VDSpiral_RT(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
453
435
|
{
|
|
454
|
-
|
|
436
|
+
chkNarg(narg, 7);
|
|
455
437
|
|
|
456
438
|
MrTraj::GeoPara objGeoPara;
|
|
457
439
|
MrTraj::GradPara objGradPara;
|
|
@@ -470,7 +452,7 @@ PyObject* getG_VDSpiral_RT(PyObject* self, PyObject* const* args, Py_ssize_t nar
|
|
|
470
452
|
|
|
471
453
|
PyObject* getG_Rosette(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
472
454
|
{
|
|
473
|
-
|
|
455
|
+
chkNarg(narg, 9);
|
|
474
456
|
|
|
475
457
|
MrTraj::GeoPara objGeoPara;
|
|
476
458
|
MrTraj::GradPara objGradPara;
|
|
@@ -494,7 +476,7 @@ PyObject* getG_Rosette(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
494
476
|
|
|
495
477
|
PyObject* getG_Rosette_Trad(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
496
478
|
{
|
|
497
|
-
|
|
479
|
+
chkNarg(narg, 10);
|
|
498
480
|
|
|
499
481
|
MrTraj::GeoPara objGeoPara;
|
|
500
482
|
MrTraj::GradPara objGradPara;
|
|
@@ -518,7 +500,7 @@ PyObject* getG_Rosette_Trad(PyObject* self, PyObject* const* args, Py_ssize_t na
|
|
|
518
500
|
|
|
519
501
|
PyObject* getG_Shell3d(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
520
502
|
{
|
|
521
|
-
|
|
503
|
+
chkNarg(narg, 6);
|
|
522
504
|
|
|
523
505
|
MrTraj::GeoPara objGeoPara;
|
|
524
506
|
MrTraj::GradPara objGradPara;
|
|
@@ -536,7 +518,7 @@ PyObject* getG_Shell3d(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
536
518
|
|
|
537
519
|
PyObject* getG_Yarnball(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
538
520
|
{
|
|
539
|
-
|
|
521
|
+
chkNarg(narg, 6);
|
|
540
522
|
|
|
541
523
|
MrTraj::GeoPara objGeoPara;
|
|
542
524
|
MrTraj::GradPara objGradPara;
|
|
@@ -554,7 +536,7 @@ PyObject* getG_Yarnball(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
554
536
|
|
|
555
537
|
PyObject* getG_Yarnball_RT(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
556
538
|
{
|
|
557
|
-
|
|
539
|
+
chkNarg(narg, 6);
|
|
558
540
|
|
|
559
541
|
MrTraj::GeoPara objGeoPara;
|
|
560
542
|
MrTraj::GradPara objGradPara;
|
|
@@ -572,7 +554,7 @@ PyObject* getG_Yarnball_RT(PyObject* self, PyObject* const* args, Py_ssize_t nar
|
|
|
572
554
|
|
|
573
555
|
PyObject* getG_Seiffert(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
574
556
|
{
|
|
575
|
-
|
|
557
|
+
chkNarg(narg, 7);
|
|
576
558
|
|
|
577
559
|
MrTraj::GeoPara objGeoPara;
|
|
578
560
|
MrTraj::GradPara objGradPara;
|
|
@@ -591,7 +573,7 @@ PyObject* getG_Seiffert(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
591
573
|
|
|
592
574
|
PyObject* getG_Cones(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
593
575
|
{
|
|
594
|
-
|
|
576
|
+
chkNarg(narg, 6);
|
|
595
577
|
|
|
596
578
|
MrTraj::GeoPara objGeoPara;
|
|
597
579
|
MrTraj::GradPara objGradPara;
|
|
@@ -610,7 +592,7 @@ PyObject* getG_Cones(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
610
592
|
PyObject* setSolverMtg(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
611
593
|
{
|
|
612
594
|
extern bool gMrTraj_enMtg;
|
|
613
|
-
|
|
595
|
+
chkNarg(narg, 1);
|
|
614
596
|
gMrTraj_enMtg = PyLong_AsLong(args[0]);
|
|
615
597
|
Py_INCREF(Py_None);
|
|
616
598
|
return Py_None;
|
|
@@ -618,7 +600,7 @@ PyObject* setSolverMtg(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
618
600
|
|
|
619
601
|
PyObject* setTrajRev(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
620
602
|
{
|
|
621
|
-
|
|
603
|
+
chkNarg(narg, 1);
|
|
622
604
|
gMain_enTrajRev = PyLong_AsLong(args[0]);
|
|
623
605
|
Py_INCREF(Py_None);
|
|
624
606
|
return Py_None;
|
|
@@ -626,7 +608,7 @@ PyObject* setTrajRev(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
626
608
|
|
|
627
609
|
PyObject* setGoldAng(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
628
610
|
{
|
|
629
|
-
|
|
611
|
+
chkNarg(narg, 1);
|
|
630
612
|
gMain_enGoldAng = PyLong_AsLong(args[0]);
|
|
631
613
|
Py_INCREF(Py_None);
|
|
632
614
|
return Py_None;
|
|
@@ -634,7 +616,7 @@ PyObject* setGoldAng(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
634
616
|
|
|
635
617
|
PyObject* setShuf(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
636
618
|
{
|
|
637
|
-
|
|
619
|
+
chkNarg(narg, 1);
|
|
638
620
|
gMain_enShuffle = PyLong_AsLong(args[0]);
|
|
639
621
|
Py_INCREF(Py_None);
|
|
640
622
|
return Py_None;
|
|
@@ -643,7 +625,7 @@ PyObject* setShuf(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
643
625
|
PyObject* setMaxG0(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
644
626
|
{
|
|
645
627
|
extern f64 gMrTraj_g0Norm;
|
|
646
|
-
|
|
628
|
+
chkNarg(narg, 1);
|
|
647
629
|
bool enMaxG0 = PyLong_AsLong(args[0]);
|
|
648
630
|
if (enMaxG0) gMrTraj_g0Norm = 1e6;
|
|
649
631
|
else gMrTraj_g0Norm = 0e0;
|
|
@@ -654,7 +636,7 @@ PyObject* setMaxG0(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
654
636
|
PyObject* setMaxG1(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
655
637
|
{
|
|
656
638
|
extern f64 gMrTraj_g1Norm;
|
|
657
|
-
|
|
639
|
+
chkNarg(narg, 1);
|
|
658
640
|
bool enMaxG1 = PyLong_AsLong(args[0]);
|
|
659
641
|
if (enMaxG1) gMrTraj_g1Norm = 1e6;
|
|
660
642
|
else gMrTraj_g1Norm = 0e0;
|
|
@@ -665,7 +647,7 @@ PyObject* setMaxG1(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
665
647
|
PyObject* setMagOverSamp(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
666
648
|
{
|
|
667
649
|
extern i64 gMag_oversamp;
|
|
668
|
-
|
|
650
|
+
chkNarg(narg, 1);
|
|
669
651
|
gMag_oversamp = PyLong_AsLong(args[0]);
|
|
670
652
|
Py_INCREF(Py_None);
|
|
671
653
|
return Py_None;
|
|
@@ -674,7 +656,7 @@ PyObject* setMagOverSamp(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
674
656
|
PyObject* setMagSFS(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
675
657
|
{
|
|
676
658
|
extern bool gMag_enSFS;
|
|
677
|
-
|
|
659
|
+
chkNarg(narg, 1);
|
|
678
660
|
gMag_enSFS = PyLong_AsLong(args[0]);
|
|
679
661
|
Py_INCREF(Py_None);
|
|
680
662
|
return Py_None;
|
|
@@ -683,7 +665,7 @@ PyObject* setMagSFS(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
683
665
|
PyObject* setMagGradRep(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
684
666
|
{
|
|
685
667
|
extern bool gMag_enGradRep;
|
|
686
|
-
|
|
668
|
+
chkNarg(narg, 1);
|
|
687
669
|
gMag_enGradRep = PyLong_AsLong(args[0]);
|
|
688
670
|
Py_INCREF(Py_None);
|
|
689
671
|
return Py_None;
|
|
@@ -692,7 +674,7 @@ PyObject* setMagGradRep(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
692
674
|
PyObject* setMagTrajRep(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
693
675
|
{
|
|
694
676
|
extern bool gMag_enTrajRep;
|
|
695
|
-
|
|
677
|
+
chkNarg(narg, 1);
|
|
696
678
|
gMag_enTrajRep = PyLong_AsLong(args[0]);
|
|
697
679
|
Py_INCREF(Py_None);
|
|
698
680
|
return Py_None;
|
|
@@ -701,20 +683,53 @@ PyObject* setMagTrajRep(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
701
683
|
PyObject* setDbgPrint(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
702
684
|
{
|
|
703
685
|
extern bool glob_enDbgPrint;
|
|
704
|
-
|
|
686
|
+
chkNarg(narg, 1);
|
|
705
687
|
glob_enDbgPrint = PyLong_AsLong(args[0]);
|
|
706
688
|
Py_INCREF(Py_None);
|
|
707
689
|
return Py_None;
|
|
708
690
|
}
|
|
709
691
|
|
|
692
|
+
PyObject* saveF64(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
693
|
+
{
|
|
694
|
+
chkNarg(narg, 3);
|
|
695
|
+
const char* strHdr = PyUnicode_AsUTF8(args[0]);
|
|
696
|
+
const char* strBin = PyUnicode_AsUTF8(args[1]);
|
|
697
|
+
FILE* fHdr = fopen(strHdr, "w");
|
|
698
|
+
FILE* fBin = fopen(strBin, "wb");
|
|
699
|
+
if (fHdr==NULL || fBin==NULL)
|
|
700
|
+
{
|
|
701
|
+
if (fHdr) fclose(fHdr);
|
|
702
|
+
if (fBin) fclose(fBin);
|
|
703
|
+
Py_INCREF(Py_False);
|
|
704
|
+
return Py_False;
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
vv3 vv3Data;
|
|
708
|
+
i64 n = PyList_GET_SIZE(args[2]);
|
|
709
|
+
for (i64 i=0; i<n; ++i)
|
|
710
|
+
{
|
|
711
|
+
cvtNpa2Vv3(PyList_GET_ITEM(args[2], i), &vv3Data);
|
|
712
|
+
v3::saveF64(fHdr, fBin, vv3Data);
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
Py_INCREF(Py_True);
|
|
716
|
+
return Py_True;
|
|
717
|
+
}
|
|
718
|
+
|
|
710
719
|
PyObject* loadF64(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
711
720
|
{
|
|
712
|
-
|
|
721
|
+
chkNarg(narg, 2);
|
|
713
722
|
const char* strHdr = PyUnicode_AsUTF8(args[0]);
|
|
714
723
|
const char* strBin = PyUnicode_AsUTF8(args[1]);
|
|
715
|
-
typedef std::list<vv3> lvv3;
|
|
716
724
|
FILE* fHdr = fopen(strHdr, "r");
|
|
717
|
-
FILE* fBin = fopen(
|
|
725
|
+
FILE* fBin = fopen(strBin, "rb");
|
|
726
|
+
if (fHdr==NULL || fBin==NULL)
|
|
727
|
+
{
|
|
728
|
+
if (fHdr) fclose(fHdr);
|
|
729
|
+
if (fBin) fclose(fBin);
|
|
730
|
+
Py_INCREF(Py_None);
|
|
731
|
+
return Py_None;
|
|
732
|
+
}
|
|
718
733
|
|
|
719
734
|
lvv3 lvv3Data;
|
|
720
735
|
bool ret; vv3 vv3Data;
|
|
@@ -724,18 +739,54 @@ PyObject* loadF64(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
724
739
|
if (vv3Data.empty() || !ret) break;
|
|
725
740
|
lvv3Data.push_back(vv3Data);
|
|
726
741
|
}
|
|
742
|
+
if (fHdr) fclose(fHdr);
|
|
743
|
+
if (fBin) fclose(fBin);
|
|
727
744
|
vvv3 vvv3Data(lvv3Data.begin(), lvv3Data.end());
|
|
728
|
-
|
|
745
|
+
return cvtVvv3toList(vvv3Data);
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
PyObject* saveF32(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
749
|
+
{
|
|
750
|
+
chkNarg(narg, 3);
|
|
751
|
+
const char* strHdr = PyUnicode_AsUTF8(args[0]);
|
|
752
|
+
const char* strBin = PyUnicode_AsUTF8(args[1]);
|
|
753
|
+
FILE* fHdr = fopen(strHdr, "w");
|
|
754
|
+
FILE* fBin = fopen(strBin, "wb");
|
|
755
|
+
if (fHdr==NULL || fBin==NULL)
|
|
756
|
+
{
|
|
757
|
+
if (fHdr) fclose(fHdr);
|
|
758
|
+
if (fBin) fclose(fBin);
|
|
759
|
+
Py_INCREF(Py_False);
|
|
760
|
+
return Py_False;
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
vv3 vv3Data;
|
|
764
|
+
i64 n = PyList_GET_SIZE(args[2]);
|
|
765
|
+
for (i64 i=0; i<n; ++i)
|
|
766
|
+
{
|
|
767
|
+
cvtNpa2Vv3(PyList_GET_ITEM(args[2], i), &vv3Data);
|
|
768
|
+
v3::saveF32(fHdr, fBin, vv3Data);
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
Py_INCREF(Py_True);
|
|
772
|
+
return Py_True;
|
|
729
773
|
}
|
|
730
774
|
|
|
731
775
|
PyObject* loadF32(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
732
776
|
{
|
|
733
|
-
|
|
777
|
+
chkNarg(narg, 2);
|
|
734
778
|
const char* strHdr = PyUnicode_AsUTF8(args[0]);
|
|
735
779
|
const char* strBin = PyUnicode_AsUTF8(args[1]);
|
|
736
780
|
typedef std::list<vv3> lvv3;
|
|
737
781
|
FILE* fHdr = fopen(strHdr, "r");
|
|
738
|
-
FILE* fBin = fopen(
|
|
782
|
+
FILE* fBin = fopen(strBin, "rb");
|
|
783
|
+
if (fHdr==NULL || fBin==NULL)
|
|
784
|
+
{
|
|
785
|
+
if (fHdr) fclose(fHdr);
|
|
786
|
+
if (fBin) fclose(fBin);
|
|
787
|
+
Py_INCREF(Py_None);
|
|
788
|
+
return Py_None;
|
|
789
|
+
}
|
|
739
790
|
|
|
740
791
|
lvv3 lvv3Data;
|
|
741
792
|
bool ret; vv3 vv3Data;
|
|
@@ -745,8 +796,10 @@ PyObject* loadF32(PyObject* self, PyObject* const* args, Py_ssize_t narg)
|
|
|
745
796
|
if (vv3Data.empty() || !ret) break;
|
|
746
797
|
lvv3Data.push_back(vv3Data);
|
|
747
798
|
}
|
|
799
|
+
if (fHdr) fclose(fHdr);
|
|
800
|
+
if (fBin) fclose(fBin);
|
|
748
801
|
vvv3 vvv3Data(lvv3Data.begin(), lvv3Data.end());
|
|
749
|
-
|
|
802
|
+
return cvtVvv3toList(vvv3Data);
|
|
750
803
|
}
|
|
751
804
|
|
|
752
805
|
static PyMethodDef aMeth[] =
|
|
@@ -774,7 +827,9 @@ static PyMethodDef aMeth[] =
|
|
|
774
827
|
{"setMagGradRep", (PyCFunction)setMagGradRep, METH_FASTCALL, ""},
|
|
775
828
|
{"setMagTrajRep", (PyCFunction)setMagTrajRep, METH_FASTCALL, ""},
|
|
776
829
|
{"setDbgPrint", (PyCFunction)setDbgPrint, METH_FASTCALL, ""},
|
|
830
|
+
{"saveF64", (PyCFunction)saveF64, METH_FASTCALL, ""},
|
|
777
831
|
{"loadF64", (PyCFunction)loadF64, METH_FASTCALL, ""},
|
|
832
|
+
{"saveF32", (PyCFunction)saveF32, METH_FASTCALL, ""},
|
|
778
833
|
{"loadF32", (PyCFunction)loadF32, METH_FASTCALL, ""},
|
|
779
834
|
{NULL, NULL, 0, NULL} /* Sentinel */
|
|
780
835
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#include "v3.h"
|
|
2
2
|
#include <array>
|
|
3
3
|
#include <cinttypes>
|
|
4
|
+
#include <cstring> // test
|
|
4
5
|
|
|
5
6
|
v3::v3() :x(0e0), y(0e0), z(0e0) {}
|
|
6
7
|
v3::v3(f64 _) :x(_), y(_), z(_) {}
|
|
@@ -371,14 +372,14 @@ bool v3::saveF64(FILE* pfHdr, FILE* pfBin, const vv3& vv3Data)
|
|
|
371
372
|
i64 lenData = vv3Data.size();
|
|
372
373
|
fprintf(pfHdr, "float64[%ld][3];\n", (long)lenData);
|
|
373
374
|
|
|
374
|
-
f64* bufFile =
|
|
375
|
+
f64* bufFile = (f64*)malloc(lenData*3*sizeof(f64));
|
|
375
376
|
for(i64 i=0; i<(i64)lenData; ++i)
|
|
376
377
|
{
|
|
377
378
|
for(i64 j=0; j<3; ++j)
|
|
378
379
|
{ bufFile[3*i+j] = (f64)vv3Data[i][j]; }
|
|
379
380
|
}
|
|
380
381
|
ret &= (i64)fwrite(bufFile, sizeof(f64), lenData*3, pfBin)==lenData*3;
|
|
381
|
-
|
|
382
|
+
free(bufFile);
|
|
382
383
|
return ret;
|
|
383
384
|
}
|
|
384
385
|
|
|
@@ -392,14 +393,14 @@ bool v3::loadF64(FILE* pfHdr, FILE* pfBin, vv3* pvv3Data)
|
|
|
392
393
|
else if (nRead!=1) return false;
|
|
393
394
|
pvv3Data->resize(lenData);
|
|
394
395
|
|
|
395
|
-
f64* bufFile =
|
|
396
|
+
f64* bufFile = (f64*)malloc(lenData*3*sizeof(f64));
|
|
396
397
|
ret &= (i64)fread(bufFile, sizeof(f64), lenData*3, pfBin)==lenData*3;
|
|
397
|
-
for(i64 i=0; i<
|
|
398
|
+
for(i64 i=0; i<lenData; ++i)
|
|
398
399
|
{
|
|
399
400
|
for(i64 j=0; j<3; ++j)
|
|
400
401
|
{ (*pvv3Data)[i][j] = (f64)bufFile[3*i+j]; }
|
|
401
402
|
}
|
|
402
|
-
|
|
403
|
+
free(bufFile);
|
|
403
404
|
return ret;
|
|
404
405
|
}
|
|
405
406
|
|
|
@@ -409,14 +410,14 @@ bool v3::saveF32(FILE* pfHdr, FILE* pfBin, const vv3& vv3Data)
|
|
|
409
410
|
i64 lenData = vv3Data.size();
|
|
410
411
|
fprintf(pfHdr, "float32[%ld][3];\n", (long)lenData);
|
|
411
412
|
|
|
412
|
-
f32* bufFile =
|
|
413
|
+
f32* bufFile = (f32*)malloc(lenData*3*sizeof(f32));
|
|
413
414
|
for(i64 i=0; i<(i64)lenData; ++i)
|
|
414
415
|
{
|
|
415
416
|
for(i64 j=0; j<3; ++j)
|
|
416
417
|
{ bufFile[3*i+j] = (f32)vv3Data[i][j]; }
|
|
417
418
|
}
|
|
418
419
|
ret &= (i64)fwrite(bufFile, sizeof(f32), lenData*3, pfBin)==lenData*3;
|
|
419
|
-
|
|
420
|
+
free(bufFile);
|
|
420
421
|
return ret;
|
|
421
422
|
}
|
|
422
423
|
|
|
@@ -430,13 +431,13 @@ bool v3::loadF32(FILE* pfHdr, FILE* pfBin, vv3* pvv3Data)
|
|
|
430
431
|
else if (nRead!=1) return false;
|
|
431
432
|
pvv3Data->resize(lenData);
|
|
432
433
|
|
|
433
|
-
f32* bufFile =
|
|
434
|
+
f32* bufFile = (f32*)malloc(lenData*3*sizeof(f32));
|
|
434
435
|
ret &= (i64)fread(bufFile, sizeof(f32), lenData*3, pfBin)==lenData*3;
|
|
435
|
-
for(i64 i=0; i<
|
|
436
|
+
for(i64 i=0; i<lenData; ++i)
|
|
436
437
|
{
|
|
437
438
|
for(i64 j=0; j<3; ++j)
|
|
438
439
|
{ (*pvv3Data)[i][j] = (f64)bufFile[3*i+j]; }
|
|
439
440
|
}
|
|
440
|
-
|
|
441
|
+
free(bufFile);
|
|
441
442
|
return ret;
|
|
442
443
|
}
|
|
@@ -4,7 +4,6 @@ from os.path import exists
|
|
|
4
4
|
from ctypes.util import find_library
|
|
5
5
|
|
|
6
6
|
useMtg = exists("./mrarbgrad_src/ext/mtg/")
|
|
7
|
-
useJemalloc = find_library("jemalloc") is not None
|
|
8
7
|
|
|
9
8
|
_sources = \
|
|
10
9
|
[
|
|
@@ -23,7 +22,6 @@ modExt = Extension\
|
|
|
23
22
|
(
|
|
24
23
|
"mrarbgrad.ext",
|
|
25
24
|
sources = _sources,
|
|
26
|
-
libraries = ['jemalloc'] if useJemalloc else [],
|
|
27
25
|
include_dirs = ["./mrarbgrad_src/ext/", numpy.get_include()],
|
|
28
26
|
define_macros = [("USE_MTG", None)] if useMtg else None,
|
|
29
27
|
language = 'c++'
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|