waveforms 1.9.4__tar.gz → 2.0.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.
Files changed (102) hide show
  1. {waveforms-1.9.4/waveforms.egg-info → waveforms-2.0.1}/PKG-INFO +3 -13
  2. {waveforms-1.9.4 → waveforms-2.0.1}/pyproject.toml +1 -11
  3. {waveforms-1.9.4 → waveforms-2.0.1}/setup.py +2 -2
  4. waveforms-2.0.1/waveforms/__main__.py +16 -0
  5. waveforms-2.0.1/waveforms/utils.py +84 -0
  6. {waveforms-1.9.4 → waveforms-2.0.1}/waveforms/version.py +1 -1
  7. {waveforms-1.9.4 → waveforms-2.0.1}/waveforms/waveform.py +41 -11
  8. {waveforms-1.9.4 → waveforms-2.0.1/waveforms.egg-info}/PKG-INFO +3 -13
  9. waveforms-2.0.1/waveforms.egg-info/SOURCES.txt +24 -0
  10. waveforms-2.0.1/waveforms.egg-info/requires.txt +17 -0
  11. waveforms-1.9.4/src/ikcp.c +0 -1466
  12. waveforms-1.9.4/src/ikcp.h +0 -415
  13. waveforms-1.9.4/src/kcp.c +0 -184
  14. waveforms-1.9.4/tests/test_dicttree.py +0 -128
  15. waveforms-1.9.4/tests/test_kad.py +0 -341
  16. waveforms-1.9.4/tests/test_namespace.py +0 -137
  17. waveforms-1.9.4/tests/test_registry.py +0 -95
  18. waveforms-1.9.4/tests/test_scan_iter.py +0 -375
  19. waveforms-1.9.4/tests/test_serialize.py +0 -34
  20. waveforms-1.9.4/waveforms/__main__.py +0 -24
  21. waveforms-1.9.4/waveforms/autoreload.py +0 -26
  22. waveforms-1.9.4/waveforms/baseconfig.py +0 -268
  23. waveforms-1.9.4/waveforms/cache.py +0 -163
  24. waveforms-1.9.4/waveforms/dicttree.py +0 -511
  25. waveforms-1.9.4/waveforms/loader.py +0 -97
  26. waveforms-1.9.4/waveforms/namespace.py +0 -261
  27. waveforms-1.9.4/waveforms/registry.py +0 -672
  28. waveforms-1.9.4/waveforms/scan/__init__.py +0 -4
  29. waveforms-1.9.4/waveforms/scan/base.py +0 -544
  30. waveforms-1.9.4/waveforms/scan/dataset.py +0 -0
  31. waveforms-1.9.4/waveforms/scan/expression.py +0 -360
  32. waveforms-1.9.4/waveforms/scan/scanner.py +0 -223
  33. waveforms-1.9.4/waveforms/scan/transforms.py +0 -16
  34. waveforms-1.9.4/waveforms/scan_iter.py +0 -10
  35. waveforms-1.9.4/waveforms/security/__init__.py +0 -1
  36. waveforms-1.9.4/waveforms/security/verify.py +0 -43
  37. waveforms-1.9.4/waveforms/server/__init__.py +0 -21
  38. waveforms-1.9.4/waveforms/server/__main__.py +0 -41
  39. waveforms-1.9.4/waveforms/server/echo.py +0 -44
  40. waveforms-1.9.4/waveforms/storage/__init__.py +0 -0
  41. waveforms-1.9.4/waveforms/storage/backend/__init__.py +0 -0
  42. waveforms-1.9.4/waveforms/storage/backend/redis.py +0 -204
  43. waveforms-1.9.4/waveforms/storage/base_dataset.py +0 -352
  44. waveforms-1.9.4/waveforms/storage/chunk.py +0 -60
  45. waveforms-1.9.4/waveforms/storage/dataset.py +0 -127
  46. waveforms-1.9.4/waveforms/storage/file.py +0 -273
  47. waveforms-1.9.4/waveforms/storage/models/__init__.py +0 -22
  48. waveforms-1.9.4/waveforms/storage/models/base.py +0 -4
  49. waveforms-1.9.4/waveforms/storage/models/config.py +0 -28
  50. waveforms-1.9.4/waveforms/storage/models/file.py +0 -89
  51. waveforms-1.9.4/waveforms/storage/models/ipy.py +0 -58
  52. waveforms-1.9.4/waveforms/storage/models/record.py +0 -161
  53. waveforms-1.9.4/waveforms/storage/models/report.py +0 -22
  54. waveforms-1.9.4/waveforms/storage/models/tag.py +0 -93
  55. waveforms-1.9.4/waveforms/storage/storage.py +0 -44
  56. waveforms-1.9.4/waveforms/sys/__init__.py +0 -0
  57. waveforms-1.9.4/waveforms/sys/chat.py +0 -688
  58. waveforms-1.9.4/waveforms/sys/device/__init__.py +0 -3
  59. waveforms-1.9.4/waveforms/sys/device/basedevice.py +0 -221
  60. waveforms-1.9.4/waveforms/sys/device/loader.py +0 -86
  61. waveforms-1.9.4/waveforms/sys/device/utils.py +0 -46
  62. waveforms-1.9.4/waveforms/sys/drivers/FakeInstrument.py +0 -52
  63. waveforms-1.9.4/waveforms/sys/drivers/__init__.py +0 -0
  64. waveforms-1.9.4/waveforms/sys/ipy_events.py +0 -125
  65. waveforms-1.9.4/waveforms/sys/net/__init__.py +0 -0
  66. waveforms-1.9.4/waveforms/sys/net/bencoder.py +0 -205
  67. waveforms-1.9.4/waveforms/sys/net/cli.py +0 -169
  68. waveforms-1.9.4/waveforms/sys/net/dhcp.py +0 -543
  69. waveforms-1.9.4/waveforms/sys/net/dhcpd.py +0 -176
  70. waveforms-1.9.4/waveforms/sys/net/kad.py +0 -1142
  71. waveforms-1.9.4/waveforms/sys/net/kcp.py +0 -192
  72. waveforms-1.9.4/waveforms/sys/progress.py +0 -190
  73. waveforms-1.9.4/waveforms/sys/storage/__init__.py +0 -0
  74. waveforms-1.9.4/waveforms/sys/storage/crud.py +0 -205
  75. waveforms-1.9.4/waveforms/sys/storage/models.py +0 -642
  76. waveforms-1.9.4/waveforms/units/__init__.py +0 -119
  77. waveforms-1.9.4/waveforms/utils.py +0 -67
  78. waveforms-1.9.4/waveforms/visualization/__init__.py +0 -188
  79. waveforms-1.9.4/waveforms/visualization/__main__.py +0 -71
  80. waveforms-1.9.4/waveforms/visualization/_autoplot.py +0 -457
  81. waveforms-1.9.4/waveforms/visualization/plot_layout.py +0 -408
  82. waveforms-1.9.4/waveforms/visualization/plot_seq.py +0 -90
  83. waveforms-1.9.4/waveforms/visualization/qdat.py +0 -152
  84. waveforms-1.9.4/waveforms/visualization/widgets.py +0 -86
  85. waveforms-1.9.4/waveforms.egg-info/SOURCES.txt +0 -96
  86. waveforms-1.9.4/waveforms.egg-info/requires.txt +0 -28
  87. {waveforms-1.9.4 → waveforms-2.0.1}/LICENSE +0 -0
  88. {waveforms-1.9.4 → waveforms-2.0.1}/MANIFEST.in +0 -0
  89. {waveforms-1.9.4 → waveforms-2.0.1}/README.md +0 -0
  90. {waveforms-1.9.4 → waveforms-2.0.1}/setup.cfg +0 -0
  91. {waveforms-1.9.4 → waveforms-2.0.1}/src/waveform.h +0 -0
  92. {waveforms-1.9.4 → waveforms-2.0.1}/tests/test_multi_drag.py +0 -0
  93. {waveforms-1.9.4 → waveforms-2.0.1}/tests/test_waveform.py +0 -0
  94. {waveforms-1.9.4 → waveforms-2.0.1}/tests/test_wavevstack.py +0 -0
  95. {waveforms-1.9.4 → waveforms-2.0.1}/waveforms/__init__.py +0 -0
  96. {waveforms-1.9.4 → waveforms-2.0.1}/waveforms/_waveform.pyi +0 -0
  97. {waveforms-1.9.4 → waveforms-2.0.1}/waveforms/_waveform.pyx +0 -0
  98. {waveforms-1.9.4 → waveforms-2.0.1}/waveforms/multy_drag.py +0 -0
  99. {waveforms-1.9.4 → waveforms-2.0.1}/waveforms/waveform_parser.py +0 -0
  100. {waveforms-1.9.4 → waveforms-2.0.1}/waveforms.egg-info/dependency_links.txt +0 -0
  101. {waveforms-1.9.4 → waveforms-2.0.1}/waveforms.egg-info/entry_points.txt +0 -0
  102. {waveforms-1.9.4 → waveforms-2.0.1}/waveforms.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: waveforms
3
- Version: 1.9.4
3
+ Version: 2.0.1
4
4
  Summary: Edit waveforms used in experiment
5
5
  Author-email: feihoo87 <feihoo87@gmail.com>
6
6
  Maintainer-email: feihoo87 <feihoo87@gmail.com>
@@ -20,27 +20,17 @@ Classifier: Topic :: Scientific/Engineering :: Interface Engine/Protocol Transla
20
20
  Classifier: Programming Language :: Python
21
21
  Classifier: Programming Language :: Python :: 3.10
22
22
  Classifier: Programming Language :: Python :: 3.11
23
+ Classifier: Programming Language :: Python :: 3.12
23
24
  Requires-Python: >=3.10
24
25
  Description-Content-Type: text/markdown
25
26
  License-File: LICENSE
26
27
  Requires-Dist: click>=7.1.2
27
28
  Requires-Dist: dill>=0.3.6
28
- Requires-Dist: GitPython>=3.1.14
29
- Requires-Dist: matplotlib>=3.7.2
30
29
  Requires-Dist: numpy>=1.13.3
31
30
  Requires-Dist: ply>=3.11
32
31
  Requires-Dist: scipy>=1.0.0
33
32
  Provides-Extra: full
34
- Requires-Dist: antlr4-python3-runtime==4.12.0; extra == "full"
35
- Requires-Dist: blinker>=1.4; extra == "full"
36
- Requires-Dist: cryptography>=3.4.7; extra == "full"
37
- Requires-Dist: matplotlib>=3.4.1; extra == "full"
38
33
  Requires-Dist: msgpack>=1.0.5; extra == "full"
39
- Requires-Dist: portalocker>=1.4.0; extra == "full"
40
- Requires-Dist: SQLAlchemy>=1.4.11; extra == "full"
41
- Requires-Dist: scikit-learn>=0.24.1; extra == "full"
42
- Requires-Dist: scikit-optimize>=0.8.1; extra == "full"
43
- Requires-Dist: tenacity>=8.2.2; extra == "full"
44
34
  Provides-Extra: test
45
35
  Requires-Dist: pytest>=7.4.0; extra == "test"
46
36
  Requires-Dist: pytest-asyncio>=0.21.1; extra == "test"
@@ -26,13 +26,12 @@ classifiers = [
26
26
  "Programming Language :: Python",
27
27
  "Programming Language :: Python :: 3.10",
28
28
  "Programming Language :: Python :: 3.11",
29
+ "Programming Language :: Python :: 3.12",
29
30
  ]
30
31
  requires-python = ">= 3.10"
31
32
  dependencies = [
32
33
  "click>=7.1.2",
33
34
  "dill>=0.3.6",
34
- "GitPython>=3.1.14",
35
- "matplotlib>=3.7.2",
36
35
  "numpy>=1.13.3",
37
36
  "ply>=3.11",
38
37
  "scipy>=1.0.0"
@@ -41,16 +40,7 @@ dynamic = ["version"]
41
40
 
42
41
  [project.optional-dependencies]
43
42
  full = [
44
- "antlr4-python3-runtime==4.12.0",
45
- "blinker>=1.4",
46
- "cryptography>=3.4.7",
47
- "matplotlib>=3.4.1",
48
43
  "msgpack>=1.0.5",
49
- "portalocker>=1.4.0",
50
- "SQLAlchemy>=1.4.11",
51
- "scikit-learn>=0.24.1",
52
- "scikit-optimize>=0.8.1",
53
- "tenacity>=8.2.2",
54
44
  ]
55
45
  test = [
56
46
  "pytest>=7.4.0",
@@ -20,8 +20,8 @@ def get_extensions():
20
20
  #from pathlib import Path
21
21
 
22
22
  extensions = [
23
- Extension('waveforms.sys.net._kcp', ['src/kcp.c', 'src/ikcp.c'],
24
- include_dirs=['src']),
23
+ # Extension('waveforms.sys.net._kcp', ['src/kcp.c', 'src/ikcp.c'],
24
+ # include_dirs=['src']),
25
25
  # Extension(
26
26
  # 'waveforms.math.npufunc',
27
27
  # ['src/multi_type_logit.c'],
@@ -0,0 +1,16 @@
1
+ import click
2
+
3
+
4
+ @click.group()
5
+ def main():
6
+ pass
7
+
8
+
9
+ @main.command()
10
+ def hello():
11
+ """Print hello world."""
12
+ click.echo('hello, world')
13
+
14
+
15
+ if __name__ == '__main__':
16
+ main()
@@ -0,0 +1,84 @@
1
+ from itertools import repeat
2
+ from typing import Optional, Sequence
3
+
4
+ import numpy as np
5
+
6
+
7
+ def getFTMatrix(fList: Sequence[float],
8
+ numOfPoints: int,
9
+ phaseList: Optional[Sequence[float]] = None,
10
+ weight: Optional[np.ndarray] = None,
11
+ sampleRate: float = 1e9) -> np.ndarray:
12
+ """
13
+ get a matrix for Fourier transform
14
+
15
+ Args:
16
+ fList (Sequence[float]): list of frequencies
17
+ numOfPoints (int): size of signal frame
18
+ phaseList (Optional[Sequence[float]], optional): list of phase. Defaults to None.
19
+ weight (Optional[np.ndarray], optional): weight or list of weight. Defaults to None.
20
+ sampleRate (float, optional): sample rate of signal. Defaults to 1e9.
21
+
22
+ Returns:
23
+ numpy.ndarray: exp matrix
24
+
25
+ >>> shots, numOfPoints, sampleRate = 100, 1000, 1e9
26
+ >>> f1, f2 = -12.7e6, 32.8e6
27
+ >>> signal = np.random.randn(shots, numOfPoints)
28
+ >>> e = getFTMatrix([f1, f2], numOfPoints, sampleRate=sampleRate)
29
+ >>> ret = signal @ e
30
+ >>> ret.shape
31
+ (100, 2)
32
+ >>> t = np.arange(numOfPoints) / sampleRate
33
+ >>> signal = 0.8 * np.sin(2 * np.pi * f1 * t) + 0.2 * np.cos(2 * np.pi * f2 * t)
34
+ >>> signal @ e
35
+ array([-0.00766509-0.79518987j, 0.19531432+0.00207068j])
36
+ >>> spec = 2 * np.fft.fft(signal) / numOfPoints
37
+ >>> freq = np.fft.fftfreq(numOfPoints)
38
+ >>> e = getFTMatrix(freq, numOfPoints, sampleRate=1)
39
+ >>> np.allclose(spec, signal @ e)
40
+ True
41
+ """
42
+ e = []
43
+ t = np.linspace(0, numOfPoints / sampleRate, numOfPoints, endpoint=False)
44
+ if weight is None or len(weight) == 0:
45
+ weight = np.full(numOfPoints, 2 / numOfPoints)
46
+ if phaseList is None or len(phaseList) == 0:
47
+ phaseList = np.zeros_like(fList)
48
+ if weight.ndim == 1:
49
+ weightList = repeat(weight)
50
+ else:
51
+ weightList = weight
52
+ for f, phase, weight in zip(fList, phaseList, weightList):
53
+ e.append(weight * np.exp(-1j * (2 * np.pi * f * t + phase)))
54
+ return np.asarray(e).T
55
+
56
+
57
+ def shift(signal: np.ndarray, delay: float, dt: float) -> np.ndarray:
58
+ """
59
+ delay a signal
60
+
61
+ Args:
62
+ signal (np.ndarray): input signal
63
+ delay (float): delayed time
64
+ dt (float): time step of signal samples
65
+
66
+ Returns:
67
+ np.ndarray: delayed signal
68
+ """
69
+ points = int(delay // dt)
70
+ delta = delay / dt - points
71
+
72
+ if delta > 0:
73
+ ker = np.array([0, 1 - delta, delta])
74
+ signal = np.convolve(signal, ker, mode='same')
75
+
76
+ if points == 0:
77
+ return signal
78
+
79
+ ret = np.zeros_like(signal)
80
+ if points < 0:
81
+ ret[:points] = signal[-points:]
82
+ else:
83
+ ret[points:] = signal[:-points]
84
+ return ret
@@ -1,2 +1,2 @@
1
1
  """Define version number here and read it from setup.py automatically"""
2
- __version__ = "1.9.4"
2
+ __version__ = "2.0.1"
@@ -127,36 +127,38 @@ class Waveform:
127
127
  self.filters = None
128
128
  self.label = None
129
129
 
130
- def _begin(self):
131
- for i, s in enumerate(self.seq):
130
+ @staticmethod
131
+ def _begin(bounds, seq):
132
+ for i, s in enumerate(seq):
132
133
  if s is not _zero:
133
134
  if i == 0:
134
135
  return -inf
135
- return self.bounds[i - 1]
136
+ return bounds[i - 1]
136
137
  return inf
137
138
 
138
- def _end(self):
139
- N = len(self.bounds)
140
- for i, s in enumerate(self.seq[::-1]):
139
+ @staticmethod
140
+ def _end(bounds, seq):
141
+ N = len(bounds)
142
+ for i, s in enumerate(seq[::-1]):
141
143
  if s is not _zero:
142
144
  if i == 0:
143
145
  return inf
144
- return self.bounds[N - i - 1]
146
+ return bounds[N - i - 1]
145
147
  return -inf
146
148
 
147
149
  @property
148
150
  def begin(self):
149
151
  if self.start is None:
150
- return self._begin()
152
+ return self._begin(self.bounds, self.seq)
151
153
  else:
152
- return max(self.start, self._begin())
154
+ return max(self.start, self._begin(self.bounds, self.seq))
153
155
 
154
156
  @property
155
157
  def end(self):
156
158
  if self.stop is None:
157
- return self._end()
159
+ return self._end(self.bounds, self.seq)
158
160
  else:
159
- return min(self.stop, self._end())
161
+ return min(self.stop, self._end(self.bounds, self.seq))
160
162
 
161
163
  def sample(self,
162
164
  sample_rate=None,
@@ -611,6 +613,34 @@ class WaveVStack(Waveform):
611
613
  self.label = None
612
614
  self.function_lib = None
613
615
 
616
+ def __begin(self):
617
+ if self.wlist:
618
+ v = [self._begin(bounds, seq) for bounds, seq in self.wlist]
619
+ return min(v)
620
+ else:
621
+ return -inf
622
+
623
+ def __end(self):
624
+ if self.wlist:
625
+ v = [self._end(bounds, seq) for bounds, seq in self.wlist]
626
+ return max(v)
627
+ else:
628
+ return inf
629
+
630
+ @property
631
+ def begin(self):
632
+ if self.start is None:
633
+ return self.__begin()
634
+ else:
635
+ return max(self.start, self.__begin())
636
+
637
+ @property
638
+ def end(self):
639
+ if self.stop is None:
640
+ return self.__end()
641
+ else:
642
+ return min(self.stop, self.__end())
643
+
614
644
  def __call__(self, x, frag=False, out=None, function_lib=None):
615
645
  assert frag is False, 'WaveVStack does not support frag mode'
616
646
  out = np.full_like(x, self.offset, dtype=complex)
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: waveforms
3
- Version: 1.9.4
3
+ Version: 2.0.1
4
4
  Summary: Edit waveforms used in experiment
5
5
  Author-email: feihoo87 <feihoo87@gmail.com>
6
6
  Maintainer-email: feihoo87 <feihoo87@gmail.com>
@@ -20,27 +20,17 @@ Classifier: Topic :: Scientific/Engineering :: Interface Engine/Protocol Transla
20
20
  Classifier: Programming Language :: Python
21
21
  Classifier: Programming Language :: Python :: 3.10
22
22
  Classifier: Programming Language :: Python :: 3.11
23
+ Classifier: Programming Language :: Python :: 3.12
23
24
  Requires-Python: >=3.10
24
25
  Description-Content-Type: text/markdown
25
26
  License-File: LICENSE
26
27
  Requires-Dist: click>=7.1.2
27
28
  Requires-Dist: dill>=0.3.6
28
- Requires-Dist: GitPython>=3.1.14
29
- Requires-Dist: matplotlib>=3.7.2
30
29
  Requires-Dist: numpy>=1.13.3
31
30
  Requires-Dist: ply>=3.11
32
31
  Requires-Dist: scipy>=1.0.0
33
32
  Provides-Extra: full
34
- Requires-Dist: antlr4-python3-runtime==4.12.0; extra == "full"
35
- Requires-Dist: blinker>=1.4; extra == "full"
36
- Requires-Dist: cryptography>=3.4.7; extra == "full"
37
- Requires-Dist: matplotlib>=3.4.1; extra == "full"
38
33
  Requires-Dist: msgpack>=1.0.5; extra == "full"
39
- Requires-Dist: portalocker>=1.4.0; extra == "full"
40
- Requires-Dist: SQLAlchemy>=1.4.11; extra == "full"
41
- Requires-Dist: scikit-learn>=0.24.1; extra == "full"
42
- Requires-Dist: scikit-optimize>=0.8.1; extra == "full"
43
- Requires-Dist: tenacity>=8.2.2; extra == "full"
44
34
  Provides-Extra: test
45
35
  Requires-Dist: pytest>=7.4.0; extra == "test"
46
36
  Requires-Dist: pytest-asyncio>=0.21.1; extra == "test"
@@ -0,0 +1,24 @@
1
+ LICENSE
2
+ MANIFEST.in
3
+ README.md
4
+ pyproject.toml
5
+ setup.py
6
+ src/waveform.h
7
+ tests/test_multi_drag.py
8
+ tests/test_waveform.py
9
+ tests/test_wavevstack.py
10
+ waveforms/__init__.py
11
+ waveforms/__main__.py
12
+ waveforms/_waveform.pyi
13
+ waveforms/_waveform.pyx
14
+ waveforms/multy_drag.py
15
+ waveforms/utils.py
16
+ waveforms/version.py
17
+ waveforms/waveform.py
18
+ waveforms/waveform_parser.py
19
+ waveforms.egg-info/PKG-INFO
20
+ waveforms.egg-info/SOURCES.txt
21
+ waveforms.egg-info/dependency_links.txt
22
+ waveforms.egg-info/entry_points.txt
23
+ waveforms.egg-info/requires.txt
24
+ waveforms.egg-info/top_level.txt
@@ -0,0 +1,17 @@
1
+ click>=7.1.2
2
+ dill>=0.3.6
3
+ numpy>=1.13.3
4
+ ply>=3.11
5
+ scipy>=1.0.0
6
+
7
+ [docs]
8
+ Sphinx
9
+ sphinxcontrib-napoleon
10
+ sphinxcontrib-zopeext
11
+
12
+ [full]
13
+ msgpack>=1.0.5
14
+
15
+ [test]
16
+ pytest>=7.4.0
17
+ pytest-asyncio>=0.21.1