PyQUDA-Utils 0.9.10.dev1__tar.gz → 0.9.11.dev1__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.
Files changed (39) hide show
  1. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/PKG-INFO +1 -1
  2. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/PyQUDA_Utils.egg-info/PKG-INFO +1 -1
  3. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/PyQUDA_Utils.egg-info/SOURCES.txt +14 -12
  4. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/PyQUDA_Utils.egg-info/top_level.txt +1 -0
  5. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/pyproject.toml +1 -1
  6. pyquda_utils-0.9.11.dev1/pyquda_io/__init__.py +46 -0
  7. pyquda_utils-0.9.10.dev1/pyquda_utils/io/gauge_utils.py → pyquda_utils-0.9.11.dev1/pyquda_io/_field_utils.py +43 -25
  8. pyquda_utils-0.9.11.dev1/pyquda_io/_version.py +1 -0
  9. {pyquda_utils-0.9.10.dev1/pyquda_utils/io → pyquda_utils-0.9.11.dev1/pyquda_io}/chroma.py +1 -1
  10. {pyquda_utils-0.9.10.dev1/pyquda_utils/io → pyquda_utils-0.9.11.dev1/pyquda_io}/kyu.py +4 -1
  11. {pyquda_utils-0.9.10.dev1/pyquda_utils/io → pyquda_utils-0.9.11.dev1/pyquda_io}/milc.py +1 -1
  12. {pyquda_utils-0.9.10.dev1/pyquda_utils/io → pyquda_utils-0.9.11.dev1/pyquda_io}/nersc.py +2 -2
  13. {pyquda_utils-0.9.10.dev1/pyquda_utils/io → pyquda_utils-0.9.11.dev1/pyquda_io}/npy.py +1 -1
  14. {pyquda_utils-0.9.10.dev1/pyquda_utils/io → pyquda_utils-0.9.11.dev1/pyquda_io}/openqcd.py +2 -2
  15. {pyquda_utils-0.9.10.dev1/pyquda_utils/io → pyquda_utils-0.9.11.dev1/pyquda_io}/xqcd.py +4 -1
  16. pyquda_utils-0.9.11.dev1/pyquda_utils/_version.py +1 -0
  17. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/pyquda_utils/core.py +4 -1
  18. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/pyquda_utils/deprecated.py +4 -4
  19. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/pyquda_utils/gpt.py +10 -7
  20. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/pyquda_utils/io/__init__.py +39 -51
  21. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/pyquda_utils/phase.py +2 -3
  22. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/pyquda_utils/quasi_axial_gauge_fixing.py +2 -3
  23. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/pyquda_utils/source.py +1 -1
  24. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/setup.py +2 -0
  25. pyquda_utils-0.9.10.dev1/pyquda_utils/_version.py +0 -1
  26. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/LICENSE +0 -0
  27. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/MANIFEST.in +0 -0
  28. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/PyQUDA_Utils.egg-info/dependency_links.txt +0 -0
  29. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/PyQUDA_Utils.egg-info/requires.txt +0 -0
  30. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/README.md +0 -0
  31. /pyquda_utils-0.9.10.dev1/pyquda_utils/io/mpi_file.py → /pyquda_utils-0.9.11.dev1/pyquda_io/_mpi_file.py +0 -0
  32. {pyquda_utils-0.9.10.dev1/pyquda_utils/io → pyquda_utils-0.9.11.dev1/pyquda_io}/io_general.py +0 -0
  33. {pyquda_utils-0.9.10.dev1/pyquda_utils/io → pyquda_utils-0.9.11.dev1/pyquda_io}/lime.py +0 -0
  34. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/pyquda_utils/__init__.py +0 -0
  35. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/pyquda_utils/convert.py +0 -0
  36. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/pyquda_utils/gamma.py +0 -0
  37. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/pyquda_utils/hmc_param.py +0 -0
  38. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/pyquda_utils/milc_rhmc_param.py +0 -0
  39. {pyquda_utils-0.9.10.dev1 → pyquda_utils-0.9.11.dev1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyQUDA-Utils
3
- Version: 0.9.10.dev1
3
+ Version: 0.9.11.dev1
4
4
  Summary: Utility scripts based on PyQUDA
5
5
  Author-email: SaltyChiang <SaltyChiang@users.noreply.github.com>
6
6
  Maintainer-email: SaltyChiang <SaltyChiang@users.noreply.github.com>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyQUDA-Utils
3
- Version: 0.9.10.dev1
3
+ Version: 0.9.11.dev1
4
4
  Summary: Utility scripts based on PyQUDA
5
5
  Author-email: SaltyChiang <SaltyChiang@users.noreply.github.com>
6
6
  Maintainer-email: SaltyChiang <SaltyChiang@users.noreply.github.com>
@@ -8,6 +8,19 @@ PyQUDA_Utils.egg-info/SOURCES.txt
8
8
  PyQUDA_Utils.egg-info/dependency_links.txt
9
9
  PyQUDA_Utils.egg-info/requires.txt
10
10
  PyQUDA_Utils.egg-info/top_level.txt
11
+ pyquda_io/__init__.py
12
+ pyquda_io/_field_utils.py
13
+ pyquda_io/_mpi_file.py
14
+ pyquda_io/_version.py
15
+ pyquda_io/chroma.py
16
+ pyquda_io/io_general.py
17
+ pyquda_io/kyu.py
18
+ pyquda_io/lime.py
19
+ pyquda_io/milc.py
20
+ pyquda_io/nersc.py
21
+ pyquda_io/npy.py
22
+ pyquda_io/openqcd.py
23
+ pyquda_io/xqcd.py
11
24
  pyquda_utils/__init__.py
12
25
  pyquda_utils/_version.py
13
26
  pyquda_utils/convert.py
@@ -20,15 +33,4 @@ pyquda_utils/milc_rhmc_param.py
20
33
  pyquda_utils/phase.py
21
34
  pyquda_utils/quasi_axial_gauge_fixing.py
22
35
  pyquda_utils/source.py
23
- pyquda_utils/io/__init__.py
24
- pyquda_utils/io/chroma.py
25
- pyquda_utils/io/gauge_utils.py
26
- pyquda_utils/io/io_general.py
27
- pyquda_utils/io/kyu.py
28
- pyquda_utils/io/lime.py
29
- pyquda_utils/io/milc.py
30
- pyquda_utils/io/mpi_file.py
31
- pyquda_utils/io/nersc.py
32
- pyquda_utils/io/npy.py
33
- pyquda_utils/io/openqcd.py
34
- pyquda_utils/io/xqcd.py
36
+ pyquda_utils/io/__init__.py
@@ -2,7 +2,7 @@
2
2
  requires = ["setuptools", "wheel"]
3
3
 
4
4
  [tool.setuptools.packages.find]
5
- include = ["pyquda_utils*"]
5
+ include = ["pyquda_utils*", "pyquda_io*"]
6
6
 
7
7
  [tool.setuptools.dynamic]
8
8
  version = { attr = "pyquda_utils._version.__version__" }
@@ -0,0 +1,46 @@
1
+ # flake8: noqa
2
+
3
+ from .io_general import (
4
+ IOGeneral,
5
+ read as readIOGeneral,
6
+ write as writeIOGeneral,
7
+ )
8
+ from .lime import (
9
+ Lime,
10
+ )
11
+ from .npy import (
12
+ readGauge as readNPYGauge,
13
+ writeGauge as writeNPYGauge,
14
+ readPropagator as readNPYPropagator,
15
+ writePropagator as writeNPYPropagator,
16
+ )
17
+ from .chroma import (
18
+ readQIOGauge as readChromaQIOGauge,
19
+ readQIOPropagator as readChromaQIOPropagator,
20
+ readILDGBinGauge,
21
+ )
22
+ from .milc import (
23
+ readGauge as readMILCGauge,
24
+ writeGauge as writeMILCGauge,
25
+ readQIOPropagator as readMILCQIOPropagator,
26
+ )
27
+ from .kyu import (
28
+ readGauge as readKYUGauge,
29
+ writeGauge as writeKYUGauge,
30
+ readPropagator as readKYUPropagator,
31
+ writePropagator as writeKYUPropagator,
32
+ )
33
+ from .xqcd import (
34
+ readPropagator as readXQCDPropagator,
35
+ writePropagator as writeXQCDPropagator,
36
+ readPropagatorFast as readXQCDPropagatorFast,
37
+ writePropagatorFast as writeXQCDPropagatorFast,
38
+ )
39
+ from .nersc import (
40
+ readGauge as readNERSCGauge,
41
+ writeGauge as writeNERSCGauge,
42
+ )
43
+ from .openqcd import (
44
+ readGauge as readOpenQCDGauge,
45
+ writeGauge as writeOpenQCDGauge,
46
+ )
@@ -3,7 +3,7 @@ from typing import List
3
3
  from mpi4py import MPI
4
4
  import numpy
5
5
 
6
- from .mpi_file import getSublatticeSize, getNeighbourRank
6
+ from ._mpi_file import getSublatticeSize, getNeighbourRank
7
7
 
8
8
  Nd, Nc = 4, 3
9
9
 
@@ -72,30 +72,12 @@ def gaugeLexicoPlaquette(latt_size: List[int], grid_size: List[int], gauge: nump
72
72
  extended[:, -1, :-1, :-1, :-1] = buf
73
73
 
74
74
  plaq = numpy.zeros((6))
75
- plaq[0] = numpy.vdot(
76
- numpy.linalg.matmul(gauge[0], extended[1, :-1, :-1, :-1, 1:]),
77
- numpy.linalg.matmul(gauge[1], extended[0, :-1, :-1, 1:, :-1]),
78
- ).real
79
- plaq[1] = numpy.vdot(
80
- numpy.linalg.matmul(gauge[0], extended[2, :-1, :-1, :-1, 1:]),
81
- numpy.linalg.matmul(gauge[2], extended[0, :-1, 1:, :-1, :-1]),
82
- ).real
83
- plaq[2] = numpy.vdot(
84
- numpy.linalg.matmul(gauge[1], extended[2, :-1, :-1, 1:, :-1]),
85
- numpy.linalg.matmul(gauge[2], extended[1, :-1, 1:, :-1, :-1]),
86
- ).real
87
- plaq[3] = numpy.vdot(
88
- numpy.linalg.matmul(gauge[0], extended[3, :-1, :-1, :-1, 1:]),
89
- numpy.linalg.matmul(gauge[3], extended[0, 1:, :-1, :-1, :-1]),
90
- ).real
91
- plaq[4] = numpy.vdot(
92
- numpy.linalg.matmul(gauge[1], extended[3, :-1, :-1, 1:, :-1]),
93
- numpy.linalg.matmul(gauge[3], extended[1, 1:, :-1, :-1, :-1]),
94
- ).real
95
- plaq[5] = numpy.vdot(
96
- numpy.linalg.matmul(gauge[2], extended[3, :-1, 1:, :-1, :-1]),
97
- numpy.linalg.matmul(gauge[3], extended[2, 1:, :-1, :-1, :-1]),
98
- ).real
75
+ plaq[0] = numpy.vdot(gauge[0] @ extended[1, :-1, :-1, :-1, 1:], gauge[1] @ extended[0, :-1, :-1, 1:, :-1]).real
76
+ plaq[1] = numpy.vdot(gauge[0] @ extended[2, :-1, :-1, :-1, 1:], gauge[2] @ extended[0, :-1, 1:, :-1, :-1]).real
77
+ plaq[2] = numpy.vdot(gauge[1] @ extended[2, :-1, :-1, 1:, :-1], gauge[2] @ extended[1, :-1, 1:, :-1, :-1]).real
78
+ plaq[3] = numpy.vdot(gauge[0] @ extended[3, :-1, :-1, :-1, 1:], gauge[3] @ extended[0, 1:, :-1, :-1, :-1]).real
79
+ plaq[4] = numpy.vdot(gauge[1] @ extended[3, :-1, :-1, 1:, :-1], gauge[3] @ extended[1, 1:, :-1, :-1, :-1]).real
80
+ plaq[5] = numpy.vdot(gauge[2] @ extended[3, :-1, 1:, :-1, :-1], gauge[3] @ extended[2, 1:, :-1, :-1, :-1]).real
99
81
 
100
82
  plaq /= int(numpy.prod(latt_size)) * Nc
101
83
  plaq = MPI.COMM_WORLD.allreduce(plaq, MPI.SUM)
@@ -186,3 +168,39 @@ def gaugeEvenShiftBackward(latt_size: List[int], grid_size: List[int], gauge: nu
186
168
  MPI.COMM_WORLD.Sendrecv_replace(buf, dest=neighbour_rank[3], source=neighbour_rank[7])
187
169
  gauge_shift[3, 1, 0, :, :, :] = buf
188
170
  return gauge_shift
171
+
172
+
173
+ # matrices to convert gamma basis bewteen DeGrand-Rossi and Dirac-Pauli
174
+ # DP for Dirac-Pauli, DR for DeGrand-Rossi
175
+ # \psi(DP) = _DR_TO_DP \psi(DR)
176
+ # \psi(DR) = _DP_TO_DR \psi(DP)
177
+ _DP_TO_DR = numpy.array(
178
+ [
179
+ [0, 1, 0, -1],
180
+ [-1, 0, 1, 0],
181
+ [0, 1, 0, 1],
182
+ [-1, 0, -1, 0],
183
+ ]
184
+ )
185
+ _DR_TO_DP = numpy.array(
186
+ [
187
+ [0, -1, 0, -1],
188
+ [1, 0, 1, 0],
189
+ [0, 1, 0, -1],
190
+ [-1, 0, 1, 0],
191
+ ]
192
+ )
193
+
194
+
195
+ def propagatorDeGrandRossiToDiracPauli(propagator: numpy.ndarray):
196
+ P = _DR_TO_DP
197
+ Pinv = _DP_TO_DR / 2
198
+
199
+ return numpy.ascontiguousarray(numpy.einsum("ij,tzyxjkab,kl->tzyxilab", P, propagator.data, Pinv, optimize=True))
200
+
201
+
202
+ def propagatorDiracPauliToDeGrandRossi(propagator: numpy.ndarray):
203
+ P = _DP_TO_DR
204
+ Pinv = _DR_TO_DP / 2
205
+
206
+ return numpy.ascontiguousarray(numpy.einsum("ij,tzyxjkab,kl->tzyxilab", P, propagator.data, Pinv, optimize=True))
@@ -0,0 +1 @@
1
+ __version__ = "0.9.11.dev1"
@@ -4,7 +4,7 @@ from xml.etree import ElementTree as ET
4
4
 
5
5
  from mpi4py import MPI
6
6
 
7
- from .mpi_file import getSublatticeSize, getGridCoord, readMPIFile
7
+ from ._mpi_file import getSublatticeSize, getGridCoord, readMPIFile
8
8
 
9
9
  Nd, Ns, Nc = 4, 4, 3
10
10
  _precision_map = {"D": 8, "F": 4, "S": 4}
@@ -3,7 +3,8 @@ from typing import List
3
3
 
4
4
  import numpy
5
5
 
6
- from .mpi_file import getSublatticeSize, readMPIFile, writeMPIFile
6
+ from ._mpi_file import getSublatticeSize, readMPIFile, writeMPIFile
7
+ from ._field_utils import propagatorDiracPauliToDeGrandRossi, propagatorDeGrandRossiToDiracPauli
7
8
 
8
9
  Nd, Ns, Nc = 4, 4, 3
9
10
 
@@ -48,6 +49,7 @@ def readPropagator(filename: str, latt_size: List[int], grid_size: List[int]):
48
49
  .reshape(Lt, Lz, Ly, Lx, Ns, Ns, Nc, Nc * 2)
49
50
  .view("<c16")
50
51
  )
52
+ propagator = propagatorDiracPauliToDeGrandRossi(propagator)
51
53
  return propagator
52
54
 
53
55
 
@@ -56,6 +58,7 @@ def writePropagator(filename: str, latt_size: List[int], grid_size: List[int], p
56
58
  Lx, Ly, Lz, Lt = getSublatticeSize(latt_size, grid_size)
57
59
  dtype, offset = ">f8", 0
58
60
 
61
+ propagator = propagatorDeGrandRossiToDiracPauli(propagator)
59
62
  propagator = (
60
63
  propagator.view("<f8")
61
64
  .reshape(Lt, Lz, Ly, Lx, Ns, Ns, Nc, Nc, 2)
@@ -7,7 +7,7 @@ from xml.etree import ElementTree as ET
7
7
  import numpy
8
8
  from mpi4py import MPI
9
9
 
10
- from .mpi_file import getGridCoord, getSublatticeSize, readMPIFile, writeMPIFile
10
+ from ._mpi_file import getGridCoord, getSublatticeSize, readMPIFile, writeMPIFile
11
11
 
12
12
  Nd, Ns, Nc = 4, 4, 3
13
13
  _precision_map = {"D": 8, "F": 4, "S": 4}
@@ -5,8 +5,8 @@ from typing import Dict, List
5
5
  import numpy
6
6
  from mpi4py import MPI
7
7
 
8
- from .mpi_file import getSublatticeSize, readMPIFile, writeMPIFile
9
- from .gauge_utils import gaugeLexicoPlaquette
8
+ from ._mpi_file import getSublatticeSize, readMPIFile, writeMPIFile
9
+ from ._field_utils import gaugeLexicoPlaquette
10
10
 
11
11
  Nd, Ns, Nc = 4, 4, 3
12
12
 
@@ -5,7 +5,7 @@ import numpy
5
5
  from numpy.lib.format import dtype_to_descr, read_magic, read_array_header_1_0, write_array_header_1_0
6
6
  from mpi4py import MPI
7
7
 
8
- from .mpi_file import getSublatticeSize, readMPIFile, writeMPIFile
8
+ from ._mpi_file import getSublatticeSize, readMPIFile, writeMPIFile
9
9
 
10
10
  Nd, Ns, Nc = 4, 4, 3
11
11
 
@@ -5,8 +5,8 @@ from typing import List
5
5
  import numpy
6
6
  from mpi4py import MPI
7
7
 
8
- from .mpi_file import getSublatticeSize, readMPIFile, writeMPIFile
9
- from .gauge_utils import gaugeEvenOdd, gaugeLexico, gaugeLexicoPlaquette, gaugeOddShiftForward, gaugeEvenShiftBackward
8
+ from ._mpi_file import getSublatticeSize, readMPIFile, writeMPIFile
9
+ from ._field_utils import gaugeEvenOdd, gaugeLexico, gaugeLexicoPlaquette, gaugeOddShiftForward, gaugeEvenShiftBackward
10
10
 
11
11
  Nd, Ns, Nc = 4, 4, 3
12
12
 
@@ -3,7 +3,8 @@ from typing import List
3
3
 
4
4
  import numpy
5
5
 
6
- from .mpi_file import getSublatticeSize, readMPIFile, writeMPIFile
6
+ from ._mpi_file import getSublatticeSize, readMPIFile, writeMPIFile
7
+ from ._field_utils import propagatorDiracPauliToDeGrandRossi, propagatorDeGrandRossiToDiracPauli
7
8
 
8
9
  Ns, Nc = 4, 3
9
10
 
@@ -16,6 +17,7 @@ def readPropagator(filename: str, latt_size: List[int], grid_size: List[int], st
16
17
  if not staggered:
17
18
  propagator = readMPIFile(filename, dtype, offset, (Ns, Nc, Lt, Lz, Ly, Lx, Ns, Nc), (5, 4, 3, 2), grid_size)
18
19
  propagator = propagator.transpose(2, 3, 4, 5, 6, 0, 7, 1).astype("<c16")
20
+ propagator = propagatorDiracPauliToDeGrandRossi(propagator)
19
21
  else:
20
22
  # QDP_ALIGN16 makes the last Nc to be aligned with 16 Bytes.
21
23
  propagator_align16 = readMPIFile(filename, dtype, offset, (Nc, Lt, Lz, Ly, Lx, 4), (4, 3, 2, 1), grid_size)
@@ -32,6 +34,7 @@ def writePropagator(
32
34
  dtype, offset = "<c8", 0
33
35
 
34
36
  if not staggered:
37
+ propagator = propagatorDeGrandRossiToDiracPauli(propagator)
35
38
  propagator = propagator.astype(dtype).transpose(5, 7, 0, 1, 2, 3, 4, 6).copy()
36
39
  writeMPIFile(filename, dtype, offset, (Ns, Nc, Lt, Lz, Ly, Lx, Ns, Nc), (5, 4, 3, 2), grid_size, propagator)
37
40
  else:
@@ -0,0 +1 @@
1
+ __version__ = "0.9.11.dev1"
@@ -4,6 +4,7 @@ import numpy
4
4
 
5
5
  from pyquda import (
6
6
  initGPU,
7
+ initGrid,
7
8
  initQUDA,
8
9
  init,
9
10
  getCoordFromRank,
@@ -15,6 +16,7 @@ from pyquda import (
15
16
  getGridCoord,
16
17
  setDefaultLattice,
17
18
  getDefaultLattice,
19
+ getCUDABackend,
18
20
  getLogger,
19
21
  setLoggerLevel,
20
22
  dirac as fermion,
@@ -41,7 +43,8 @@ from pyquda.field import (
41
43
  LatticePropagator,
42
44
  LatticeStaggeredPropagator,
43
45
  lexico,
44
- cb2,
46
+ evenodd,
47
+ evenodd as cb2,
45
48
  )
46
49
  from pyquda.dirac.abstract import Multigrid, FermionDirac, StaggeredFermionDirac
47
50
 
@@ -1,6 +1,6 @@
1
1
  from typing import List
2
2
 
3
- from pyquda import getLogger, getGridSize, quda, enum_quda
3
+ from pyquda import getLogger, getGridSize, pyquda as quda, enum_quda
4
4
  from pyquda.field import LatticeFermion, LatticeGauge, LatticeInfo, LatticePropagator, Nc, Ns
5
5
  from pyquda.dirac.abstract import FermionDirac
6
6
 
@@ -101,11 +101,11 @@ def getDslash(
101
101
  latt_info = LatticeInfo([Lx, Ly, Lz, Lt], t_boundary, xi)
102
102
 
103
103
  if clover_csw != 0.0:
104
- from .dirac.clover_wilson import CloverWilsonDirac
104
+ from pyquda.dirac.clover_wilson import CloverWilsonDirac
105
105
 
106
106
  return CloverWilsonDirac(latt_info, mass, tol, maxiter, clover_csw, clover_xi, geo_block_size)
107
107
  else:
108
- from .dirac.wilson import WilsonDirac
108
+ from pyquda.dirac.wilson import WilsonDirac
109
109
 
110
110
  return WilsonDirac(latt_info, mass, tol, maxiter, geo_block_size)
111
111
 
@@ -131,6 +131,6 @@ def getStaggeredDslash(
131
131
  t_boundary = 1
132
132
  latt_info = LatticeInfo([Lx, Ly, Lz, Lt], t_boundary, 1.0)
133
133
 
134
- from .dirac.hisq import HISQDirac
134
+ from pyquda.dirac.hisq import HISQDirac
135
135
 
136
136
  return HISQDirac(latt_info, mass, tol, maxiter, naik_epsilon, None)
@@ -1,15 +1,17 @@
1
1
  from typing import List
2
2
  import numpy
3
3
 
4
- from pyquda import getSublatticeSize, getGridSize
5
- from pyquda.field import cb2, LatticeGauge, LatticeInfo, LatticePropagator
4
+ from .core import evenodd, getGridSize, LatticeGauge, LatticeInfo, LatticePropagator
6
5
 
7
6
  import gpt as g
8
7
 
9
8
 
10
9
  def LatticeInfoGPT(grid: g.grid, gen_simd_width: int):
11
10
  assert getGridSize() == grid.mpi
12
- sublatt_size = getSublatticeSize(grid.fdimensions, grid.mpi)
11
+ GLx, GLy, GLz, GLt = grid.fdimensions
12
+ Gx, Gy, Gz, Gt = grid.mpi
13
+ Lx, Ly, Lz, Lt = GLx // Gx, GLy // Gy, GLz // Gz, GLt // Gt
14
+ sublatt_size = [Lx, Ly, Lz, Lt]
13
15
  Nd = len(sublatt_size)
14
16
  precision = grid.precision.nbytes
15
17
  n_simd = gen_simd_width // (2 * precision)
@@ -32,7 +34,7 @@ def LatticeGaugeGPT(lattice: List[g.lattice], gen_simd_width: int, gauge: Lattic
32
34
  value = []
33
35
  for index in range(latt_info.Nd):
34
36
  value.append(
35
- cb2(
37
+ evenodd(
36
38
  numpy.asarray(lattice[index].mview()[0])
37
39
  .view(f"<c{2 * gpt_prec}")
38
40
  .reshape(*gpt_latt[::-1], Nc, Nc, *gpt_simd[::-1])
@@ -47,9 +49,10 @@ def LatticeGaugeGPT(lattice: List[g.lattice], gen_simd_width: int, gauge: Lattic
47
49
  else:
48
50
  assert latt_info.size == gauge.latt_info.size
49
51
  for index in range(latt_info.Nd):
50
- gpt_shape = [i for sl in zip(gpt_simd, gpt_latt) for i in sl]
52
+ gpt_shape = [i for sl in zip(gpt_simd[::-1], gpt_latt[::-1]) for i in sl]
51
53
  lattice[index].mview()[0][:] = (
52
- gauge[index].lexico()
54
+ gauge[index]
55
+ .lexico()
53
56
  .astype(f"<c{2 * gpt_prec}")
54
57
  .reshape(*gpt_shape, Nc, Nc)
55
58
  .transpose(1, 3, 5, 7, 8, 9, 0, 2, 4, 6)
@@ -65,7 +68,7 @@ def LatticePropagatorGPT(lattice: g.lattice, gen_simd_width: int, propagator: La
65
68
  Ns, Nc = latt_info.Ns, latt_info.Nc
66
69
  assert lattice.describe().startswith(f"ot_matrix_spin_color({Ns},{Nc})")
67
70
  if propagator is None:
68
- value = cb2(
71
+ value = evenodd(
69
72
  numpy.asarray(lattice.mview()[0])
70
73
  .view(f"<c{2 * gpt_prec}")
71
74
  .reshape(*gpt_latt[::-1], Ns, Ns, Nc, Nc, *gpt_simd[::-1])
@@ -2,7 +2,7 @@ from typing import List, Union
2
2
 
3
3
  import numpy
4
4
 
5
- from pyquda.field import Ns, Nc, LatticeInfo, LatticeGauge, LatticePropagator, LatticeStaggeredPropagator, cb2, lexico
5
+ from ..core import Ns, Nc, LatticeInfo, LatticeGauge, LatticePropagator, LatticeStaggeredPropagator, evenodd, lexico
6
6
 
7
7
  # matrices to convert gamma basis bewteen DeGrand-Rossi and Dirac-Pauli
8
8
  # \psi(DP) = _DR_TO_DP \psi(DR)
@@ -71,119 +71,107 @@ def rotateToDeGrandRossi(propagator: LatticePropagator):
71
71
 
72
72
  def readChromaQIOGauge(filename: str, checksum: bool = True):
73
73
  from pyquda import getGridSize
74
- from .chroma import readQIOGauge as read
74
+ from pyquda_io.chroma import readQIOGauge as read
75
75
 
76
76
  latt_size, gauge_raw = read(filename, getGridSize(), checksum)
77
- return LatticeGauge(LatticeInfo(latt_size), cb2(gauge_raw, [1, 2, 3, 4]))
77
+ return LatticeGauge(LatticeInfo(latt_size), evenodd(gauge_raw, [1, 2, 3, 4]))
78
78
 
79
79
 
80
80
  def readILDGBinGauge(filename: str, dtype: str, latt_size: List[int]):
81
81
  from pyquda import getGridSize
82
- from .chroma import readILDGBinGauge as read
82
+ from pyquda_io.chroma import readILDGBinGauge as read
83
83
 
84
84
  gauge_raw = read(filename, dtype, latt_size, getGridSize())
85
- return LatticeGauge(LatticeInfo(latt_size), cb2(gauge_raw, [1, 2, 3, 4]))
85
+ return LatticeGauge(LatticeInfo(latt_size), evenodd(gauge_raw, [1, 2, 3, 4]))
86
86
 
87
87
 
88
88
  def readChromaQIOPropagator(filename: str, checksum: bool = True):
89
89
  from pyquda import getGridSize
90
- from .chroma import readQIOPropagator as read
90
+ from pyquda_io.chroma import readQIOPropagator as read
91
91
 
92
92
  latt_size, staggered, propagator_raw = read(filename, getGridSize(), checksum)
93
93
  if not staggered:
94
- return LatticePropagator(LatticeInfo(latt_size), cb2(propagator_raw, [0, 1, 2, 3]))
94
+ return LatticePropagator(LatticeInfo(latt_size), evenodd(propagator_raw, [0, 1, 2, 3]))
95
95
  else:
96
- return LatticeStaggeredPropagator(LatticeInfo(latt_size), cb2(propagator_raw, [0, 1, 2, 3]))
96
+ return LatticeStaggeredPropagator(LatticeInfo(latt_size), evenodd(propagator_raw, [0, 1, 2, 3]))
97
97
 
98
98
 
99
99
  def readMILCGauge(filename: str, checksum: bool = True):
100
100
  from pyquda import getGridSize
101
- from .milc import readGauge as read
101
+ from pyquda_io.milc import readGauge as read
102
102
 
103
103
  latt_size, gauge_raw = read(filename, getGridSize(), checksum)
104
- return LatticeGauge(LatticeInfo(latt_size), cb2(gauge_raw, [1, 2, 3, 4]))
104
+ return LatticeGauge(LatticeInfo(latt_size), evenodd(gauge_raw, [1, 2, 3, 4]))
105
105
 
106
106
 
107
107
  def writeMILCGauge(filename: str, gauge: LatticeGauge):
108
- from .milc import writeGauge as write
108
+ from pyquda_io.milc import writeGauge as write
109
109
 
110
110
  write(filename, gauge.latt_info.global_size, gauge.latt_info.grid_size, gauge.lexico())
111
111
 
112
112
 
113
113
  def readMILCQIOPropagator(filename: str):
114
114
  from pyquda import getGridSize
115
- from .milc import readQIOPropagator as read
115
+ from pyquda_io.milc import readQIOPropagator as read
116
116
 
117
117
  latt_size, staggered, propagator_raw = read(filename, getGridSize())
118
118
  if not staggered:
119
- return LatticePropagator(LatticeInfo(latt_size), cb2(propagator_raw, [0, 1, 2, 3]))
119
+ return LatticePropagator(LatticeInfo(latt_size), evenodd(propagator_raw, [0, 1, 2, 3]))
120
120
  else:
121
- return LatticeStaggeredPropagator(LatticeInfo(latt_size), cb2(propagator_raw, [0, 1, 2, 3]))
121
+ return LatticeStaggeredPropagator(LatticeInfo(latt_size), evenodd(propagator_raw, [0, 1, 2, 3]))
122
122
 
123
123
 
124
124
  def readKYUGauge(filename: str, latt_size: List[int]):
125
125
  from pyquda import getGridSize
126
- from .kyu import readGauge as read
126
+ from pyquda_io.kyu import readGauge as read
127
127
 
128
128
  gauge_raw = read(filename, latt_size, getGridSize())
129
- return LatticeGauge(LatticeInfo(latt_size), cb2(gauge_raw, [1, 2, 3, 4]))
129
+ return LatticeGauge(LatticeInfo(latt_size), evenodd(gauge_raw, [1, 2, 3, 4]))
130
130
 
131
131
 
132
132
  def writeKYUGauge(filename: str, gauge: LatticeGauge):
133
- from .kyu import writeGauge as write
133
+ from pyquda_io.kyu import writeGauge as write
134
134
 
135
135
  write(filename, gauge.latt_info.global_size, gauge.latt_info.grid_size, gauge.lexico())
136
136
 
137
137
 
138
138
  def readKYUPropagator(filename: str, latt_size: List[int]):
139
139
  from pyquda import getGridSize
140
- from .kyu import readPropagator as read
140
+ from pyquda_io.kyu import readPropagator as read
141
141
 
142
142
  propagator_raw = read(filename, latt_size, getGridSize())
143
- propagator = LatticePropagator(LatticeInfo(latt_size), cb2(propagator_raw, [0, 1, 2, 3]))
144
- propagator = rotateToDeGrandRossi(propagator)
145
- return propagator
143
+ return LatticePropagator(LatticeInfo(latt_size), evenodd(propagator_raw, [0, 1, 2, 3]))
146
144
 
147
145
 
148
146
  def writeKYUPropagator(filename: str, propagator: LatticePropagator):
149
- from .kyu import writePropagator as write
147
+ from pyquda_io.kyu import writePropagator as write
150
148
 
151
- propagator = rotateToDiracPauli(propagator)
152
- propagator_raw = propagator.lexico()
153
- write(filename, propagator.latt_info.global_size, propagator.latt_info.grid_size, propagator_raw)
149
+ write(filename, propagator.latt_info.global_size, propagator.latt_info.grid_size, propagator.lexico())
154
150
 
155
151
 
156
152
  def readXQCDPropagator(filename: str, latt_size: List[int], staggered: bool):
157
153
  from pyquda import getGridSize
158
- from .xqcd import readPropagator as read
154
+ from pyquda_io.xqcd import readPropagator as read
159
155
 
160
156
  propagator_raw = read(filename, latt_size, getGridSize(), staggered)
161
- if not staggered:
162
- return rotateToDeGrandRossi(LatticePropagator(LatticeInfo(latt_size), cb2(propagator_raw, [0, 1, 2, 3])))
163
- else:
164
- return LatticeStaggeredPropagator(LatticeInfo(latt_size), cb2(propagator_raw, [0, 1, 2, 3]))
157
+ return LatticeStaggeredPropagator(LatticeInfo(latt_size), evenodd(propagator_raw, [0, 1, 2, 3]))
165
158
 
166
159
 
167
160
  def writeXQCDPropagator(filename: str, propagator: Union[LatticePropagator, LatticeStaggeredPropagator]):
168
- from .xqcd import writePropagator as write
161
+ from pyquda_io.xqcd import writePropagator as write
169
162
 
170
- latt_size = propagator.latt_info.global_size
171
- grid_size = propagator.latt_info.grid_size
172
163
  staggered = isinstance(propagator, LatticeStaggeredPropagator)
173
- if not staggered:
174
- write(filename, latt_size, grid_size, rotateToDiracPauli(propagator).lexico(), staggered)
175
- else:
176
- write(filename, latt_size, grid_size, propagator.lexico(), staggered)
164
+ write(filename, propagator.latt_info.global_size, propagator.latt_info.grid_size, propagator.lexico(), staggered)
177
165
 
178
166
 
179
167
  def readXQCDPropagatorFast(filename: str, latt_size: List[int]):
180
168
  from pyquda import getGridSize
181
- from .xqcd import readPropagatorFast as read
169
+ from pyquda_io.xqcd import readPropagatorFast as read
182
170
 
183
171
  latt_info = LatticeInfo(latt_size)
184
172
  Lx, Ly, Lz, Lt = latt_info.size
185
173
  propagator_raw = read(filename, getGridSize(), latt_size)
186
- propagator = LatticePropagator(latt_info, cb2(propagator_raw, [2, 3, 4, 5]))
174
+ propagator = LatticePropagator(latt_info, evenodd(propagator_raw, [2, 3, 4, 5]))
187
175
  propagator.data = propagator.data.reshape(Ns, Nc, 2, Lt, Lz, Ly, Lx // 2, Ns, Nc)
188
176
  propagator.toDevice()
189
177
  propagator.data = propagator.data.transpose(2, 3, 4, 5, 6, 7, 0, 8, 1).astype("<c16")
@@ -192,7 +180,7 @@ def readXQCDPropagatorFast(filename: str, latt_size: List[int]):
192
180
 
193
181
 
194
182
  def writeXQCDPropagatorFast(filename: str, propagator: LatticePropagator):
195
- from .xqcd import writePropagatorFast as write
183
+ from pyquda_io.xqcd import writePropagatorFast as write
196
184
 
197
185
  latt_info = propagator.latt_info
198
186
  Lx, Ly, Lz, Lt = latt_info.size
@@ -206,15 +194,15 @@ def writeXQCDPropagatorFast(filename: str, propagator: LatticePropagator):
206
194
 
207
195
  def readNPYGauge(filename: str):
208
196
  from pyquda import getGridSize
209
- from .npy import readGauge as read
197
+ from pyquda_io.npy import readGauge as read
210
198
 
211
199
  filename = filename if filename.endswith(".npy") else filename + ".npy"
212
200
  latt_size, gauge_raw = read(filename, getGridSize())
213
- return LatticeGauge(LatticeInfo(latt_size), cb2(gauge_raw, [1, 2, 3, 4]))
201
+ return LatticeGauge(LatticeInfo(latt_size), evenodd(gauge_raw, [1, 2, 3, 4]))
214
202
 
215
203
 
216
204
  def writeNPYGauge(filename: str, gauge: LatticeGauge):
217
- from .npy import writeGauge as write
205
+ from pyquda_io.npy import writeGauge as write
218
206
 
219
207
  filename = filename if filename.endswith(".npy") else filename + ".npy"
220
208
  write(filename, gauge.latt_info.global_size, gauge.latt_info.grid_size, gauge.lexico())
@@ -222,42 +210,42 @@ def writeNPYGauge(filename: str, gauge: LatticeGauge):
222
210
 
223
211
  def readNPYPropagator(filename: str):
224
212
  from pyquda import getGridSize
225
- from .npy import readPropagator as read
213
+ from pyquda_io.npy import readPropagator as read
226
214
 
227
215
  latt_size, propagator_raw = read(filename, getGridSize())
228
- return LatticePropagator(LatticeInfo(latt_size), cb2(propagator_raw, [0, 1, 2, 3]))
216
+ return LatticePropagator(LatticeInfo(latt_size), evenodd(propagator_raw, [0, 1, 2, 3]))
229
217
 
230
218
 
231
219
  def writeNPYPropagator(filename: str, propagator: LatticePropagator):
232
- from .npy import writePropagator as write
220
+ from pyquda_io.npy import writePropagator as write
233
221
 
234
222
  write(filename, propagator.latt_info.global_size, propagator.latt_info.grid_size, propagator.lexico())
235
223
 
236
224
 
237
225
  def readOpenQCDGauge(filename: str, plaquette: bool = True):
238
226
  from pyquda import getGridSize
239
- from .openqcd import readGauge as read
227
+ from pyquda_io.openqcd import readGauge as read
240
228
 
241
229
  latt_size, gauge = read(filename, getGridSize(), plaquette, False)
242
230
  return LatticeGauge(LatticeInfo(latt_size), gauge)
243
231
 
244
232
 
245
233
  def writeOpenQCDGauge(filename: str, gauge: LatticeGauge, plaquette: float = None):
246
- from .openqcd import writeGauge as write
234
+ from pyquda_io.openqcd import writeGauge as write
247
235
 
248
236
  write(filename, gauge.latt_info.global_size, gauge.latt_info.grid_size, gauge.getHost(), plaquette, False)
249
237
 
250
238
 
251
239
  def readNERSCGauge(filename: str, plaquette: bool = True, link_trace: bool = True, checksum: bool = True):
252
240
  from pyquda import getGridSize
253
- from .nersc import readGauge as read
241
+ from pyquda_io.nersc import readGauge as read
254
242
 
255
243
  latt_size, gauge_raw = read(filename, getGridSize(), plaquette, link_trace, checksum)
256
- return LatticeGauge(LatticeInfo(latt_size), cb2(gauge_raw, [1, 2, 3, 4]))
244
+ return LatticeGauge(LatticeInfo(latt_size), evenodd(gauge_raw, [1, 2, 3, 4]))
257
245
 
258
246
 
259
247
  def writeNERSCGauge(filename: str, gauge: LatticeGauge, plaquette: float = None, use_fp32: bool = False):
260
- from .nersc import writeGauge as write
248
+ from pyquda_io.nersc import writeGauge as write
261
249
 
262
250
  write(filename, gauge.latt_info.global_size, gauge.latt_info.grid_size, gauge.lexico(), plaquette, use_fp32)
263
251
 
@@ -3,8 +3,7 @@ from typing import Sequence
3
3
 
4
4
  import numpy
5
5
 
6
- from pyquda import getCUDABackend, getLogger
7
- from pyquda.field import LatticeInfo, cb2
6
+ from .core import getLogger, getCUDABackend, evenodd, LatticeInfo
8
7
 
9
8
 
10
9
  def getMomList(mom2_max, mom2_min=0):
@@ -120,7 +119,7 @@ class GridPhase:
120
119
  phase = numpy.zeros((Lt, Lz, Ly, Lx), "<i4")
121
120
  if sx < Lx and sy < Ly and sz < Lz and st < Lt:
122
121
  phase[st::St, sz::Sz, sy::Sy, sx::Sx] = 1
123
- phase = cb2(phase, [0, 1, 2, 3])
122
+ phase = evenodd(phase, [0, 1, 2, 3])
124
123
 
125
124
  backend = getCUDABackend()
126
125
  if backend == "numpy":
@@ -1,7 +1,6 @@
1
1
  import numpy as np
2
2
 
3
- from pyquda import getRankFromCoord
4
- from pyquda.field import cb2, LatticeLink, LatticeGauge, LatticeFermion, X, Y, Z, T
3
+ from .core import getRankFromCoord, evenodd, LatticeLink, LatticeGauge, LatticeFermion, X, Y, Z, T
5
4
 
6
5
 
7
6
  def quasiAxialGaugeFixing(gauge: LatticeGauge, dir: int):
@@ -58,7 +57,7 @@ def quasiAxialGaugeFixing(gauge: LatticeGauge, dir: int):
58
57
  rotate[0] = contract("xab,xb->xab", v, cupy.exp(1j * (gi * Li) / GLi * w))
59
58
  for i in range(1, Li):
60
59
  rotate[i] = contract("xba,xbc,xc->xac", gauge_prod[i - 1].conj(), v, cupy.exp(1j * (i + gi * Li) / GLi * w))
61
- rotate = LatticeLink(gauge.latt_info, cb2(rotate.reshape(*axes_shape).transpose(*axes).get(), [0, 1, 2, 3]))
60
+ rotate = LatticeLink(gauge.latt_info, evenodd(rotate.reshape(*axes_shape).transpose(*axes).get(), [0, 1, 2, 3]))
62
61
  rotate.toDevice()
63
62
  rotate_ = LatticeFermion(gauge.latt_info)
64
63
  rotate.pack(rotate_)
@@ -1,6 +1,6 @@
1
1
  from typing import List, Literal, Union
2
2
 
3
- from pyquda import quda, getGridSize, getLogger
3
+ from pyquda import pyquda as quda, getGridSize, getLogger
4
4
  from pyquda.enum_quda import QudaDslashType, QudaParity
5
5
  from pyquda.field import (
6
6
  Ns,
@@ -11,5 +11,7 @@ if "egg_info" in sys.argv or "dist_info" in sys.argv or "sdist" in sys.argv:
11
11
  tag, post = describe, 0
12
12
  with open(os.path.join(os.path.dirname(__file__), "pyquda_utils", "_version.py"), "w") as f:
13
13
  f.write(f'__version__ = "{tag[1:]}.dev{post}"\n')
14
+ with open(os.path.join(os.path.dirname(__file__), "pyquda_io", "_version.py"), "w") as f:
15
+ f.write(f'__version__ = "{tag[1:]}.dev{post}"\n')
14
16
 
15
17
  setup()
@@ -1 +0,0 @@
1
- __version__ = "0.9.10.dev1"