quasardb 3.14.2.dev5__cp310-cp310-macosx_11_0_arm64.whl → 3.14.2.dev7__cp310-cp310-macosx_11_0_arm64.whl

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.

Potentially problematic release.


This version of quasardb might be problematic. Click here for more details.

Files changed (54) hide show
  1. quasardb/CMakeFiles/CMakeDirectoryInformation.cmake +1 -1
  2. quasardb/Makefile +11 -11
  3. quasardb/__init__.py +8 -5
  4. quasardb/__init__.pyi +72 -0
  5. quasardb/cmake_install.cmake +1 -1
  6. quasardb/date/CMakeFiles/CMakeDirectoryInformation.cmake +1 -1
  7. quasardb/date/CMakeFiles/Export/a52b05f964b070ee926bcad51d3288af/dateTargets.cmake +1 -1
  8. quasardb/date/Makefile +11 -11
  9. quasardb/date/cmake_install.cmake +1 -1
  10. quasardb/date/dateTargets.cmake +1 -1
  11. quasardb/libqdb_api.dylib +0 -0
  12. quasardb/numpy/__init__.py +126 -43
  13. quasardb/pandas/__init__.py +55 -20
  14. quasardb/pool.py +6 -0
  15. quasardb/pybind11/CMakeFiles/CMakeDirectoryInformation.cmake +1 -1
  16. quasardb/pybind11/Makefile +11 -11
  17. quasardb/pybind11/cmake_install.cmake +1 -1
  18. quasardb/quasardb/__init__.pyi +97 -0
  19. quasardb/quasardb/_batch_column.pyi +5 -0
  20. quasardb/quasardb/_batch_inserter.pyi +30 -0
  21. quasardb/quasardb/_blob.pyi +16 -0
  22. quasardb/quasardb/_cluster.pyi +100 -0
  23. quasardb/quasardb/_continuous.pyi +16 -0
  24. quasardb/quasardb/_double.pyi +7 -0
  25. quasardb/quasardb/_entry.pyi +60 -0
  26. quasardb/quasardb/_error.pyi +15 -0
  27. quasardb/quasardb/_integer.pyi +7 -0
  28. quasardb/quasardb/_node.pyi +26 -0
  29. quasardb/quasardb/_options.pyi +105 -0
  30. quasardb/quasardb/_perf.pyi +5 -0
  31. quasardb/quasardb/_properties.pyi +5 -0
  32. quasardb/quasardb/_query.pyi +2 -0
  33. quasardb/quasardb/_reader.pyi +9 -0
  34. quasardb/quasardb/_retry.pyi +16 -0
  35. quasardb/quasardb/_string.pyi +12 -0
  36. quasardb/quasardb/_table.pyi +125 -0
  37. quasardb/quasardb/_tag.pyi +5 -0
  38. quasardb/quasardb/_timestamp.pyi +9 -0
  39. quasardb/quasardb/_writer.pyi +111 -0
  40. quasardb/quasardb/metrics/__init__.pyi +20 -0
  41. quasardb/quasardb.cpython-310-darwin.so +0 -0
  42. quasardb/range-v3/CMakeFiles/CMakeDirectoryInformation.cmake +1 -1
  43. quasardb/range-v3/CMakeFiles/Export/d94ef200eca10a819b5858b33e808f5b/range-v3-targets.cmake +1 -1
  44. quasardb/range-v3/CMakeFiles/range.v3.headers.dir/build.make +3 -3
  45. quasardb/range-v3/Makefile +11 -11
  46. quasardb/range-v3/cmake_install.cmake +1 -1
  47. quasardb/range-v3/range-v3-config.cmake +1 -1
  48. quasardb/stats.py +223 -110
  49. {quasardb-3.14.2.dev5.dist-info → quasardb-3.14.2.dev7.dist-info}/METADATA +3 -2
  50. quasardb-3.14.2.dev7.dist-info/RECORD +69 -0
  51. {quasardb-3.14.2.dev5.dist-info → quasardb-3.14.2.dev7.dist-info}/WHEEL +1 -1
  52. quasardb-3.14.2.dev5.dist-info/RECORD +0 -45
  53. {quasardb-3.14.2.dev5.dist-info → quasardb-3.14.2.dev7.dist-info/licenses}/LICENSE.md +0 -0
  54. {quasardb-3.14.2.dev5.dist-info → quasardb-3.14.2.dev7.dist-info}/top_level.txt +0 -0
quasardb/stats.py CHANGED
@@ -1,14 +1,20 @@
1
1
  import re
2
+
2
3
  import quasardb
3
4
  import logging
5
+ from collections import defaultdict
4
6
  from datetime import datetime
7
+ from enum import Enum
5
8
 
6
9
  logger = logging.getLogger("quasardb.stats")
7
10
 
8
-
11
+ MAX_KEYS = 4 * 1024 * 1024 # 4 million max keys
9
12
  stats_prefix = "$qdb.statistics."
13
+
14
+ # Compile these regexes once for speed
10
15
  user_pattern = re.compile(r"\$qdb.statistics.(.*).uid_([0-9]+)$")
11
16
  total_pattern = re.compile(r"\$qdb.statistics.(.*)$")
17
+ user_clean_pattern = re.compile(r"\.uid_\d+")
12
18
 
13
19
 
14
20
  def is_user_stat(s):
@@ -50,49 +56,29 @@ def of_node(dconn):
50
56
  """
51
57
 
52
58
  start = datetime.now()
53
- raw = {k: _get_stat(dconn, k) for k in dconn.prefix_get(stats_prefix, 1000)}
54
59
 
55
- ret = {"by_uid": _by_uid(raw), "cumulative": _cumulative(raw)}
60
+ ks = _get_all_keys(dconn)
61
+ idx = _index_keys(dconn, ks)
62
+ raw = {k: _get_stat_value(dconn, k) for k in ks}
63
+
64
+ ret = {"by_uid": _by_uid(raw, idx), "cumulative": _cumulative(raw, idx)}
56
65
 
57
66
  check_duration = datetime.now() - start
58
67
 
59
- ret["cumulative"]["check.online"] = 1
60
- ret["cumulative"]["check.duration_ms"] = int(check_duration.total_seconds() * 1000)
68
+ ret["cumulative"]["check.online"] = {
69
+ "value": 1,
70
+ "type": Type.ACCUMULATOR,
71
+ "unit": Unit.NONE,
72
+ }
73
+ ret["cumulative"]["check.duration_ms"] = {
74
+ "value": int(check_duration.total_seconds() * 1000),
75
+ "type": Type.ACCUMULATOR,
76
+ "unit": Unit.MILLISECONDS,
77
+ }
61
78
 
62
79
  return ret
63
80
 
64
81
 
65
- _stat_types = {
66
- "node_id": ("constant", None),
67
- "operating_system": ("constant", None),
68
- "partitions_count": ("constant", "count"),
69
- "cpu.system": ("counter", "ns"),
70
- "cpu.user": ("counter", "ns"),
71
- "cpu.idle": ("counter", "ns"),
72
- "startup": ("constant", None),
73
- "startup_time": ("constant", None),
74
- "shutdown_time": ("constant", None),
75
- "network.current_users_count": ("gauge", "count"),
76
- "hardware_concurrency": ("gauge", "count"),
77
- "check.online": ("gauge", "count"),
78
- "check.duration_ms": ("constant", "ms"),
79
- "requests.bytes_in": ("counter", "bytes"),
80
- "requests.bytes_out": ("counter", "bytes"),
81
- "requests.errors_count": ("counter", "count"),
82
- "requests.successes_count": ("counter", "count"),
83
- "requests.total_count": ("counter", "count"),
84
- "async_pipelines.merge.bucket_count": ("counter", "count"),
85
- "async_pipelines.merge.duration_us": ("counter", "us"),
86
- "async_pipelines.write.successes_count": ("counter", "count"),
87
- "async_pipelines.write.failures_count": ("counter", "count"),
88
- "async_pipelines.write.time_us": ("counter", "us"),
89
- "async_pipelines.merge.max_bucket_count": ("gauge", "count"),
90
- "async_pipelines.merge.max_depth_count": ("gauge", "count"),
91
- "async_pipelines.merge.requests_count": ("counter", "count"),
92
- "evicted.count": ("counter", "count"),
93
- "pageins.count": ("counter", "count"),
94
- }
95
-
96
82
  async_pipeline_bytes_pattern = re.compile(
97
83
  r"async_pipelines.pipe_[0-9]+.merge_map.bytes"
98
84
  )
@@ -101,39 +87,6 @@ async_pipeline_count_pattern = re.compile(
101
87
  )
102
88
 
103
89
 
104
- def _stat_type(stat_id):
105
- if stat_id in _stat_types:
106
- return _stat_types[stat_id]
107
- elif stat_id.endswith("total_ns"):
108
- return ("counter", "ns")
109
- elif stat_id.endswith("total_bytes"):
110
- return ("counter", "bytes")
111
- elif stat_id.endswith("read_bytes"):
112
- return ("counter", "bytes")
113
- elif stat_id.endswith("written_bytes"):
114
- return ("counter", "bytes")
115
- elif stat_id.endswith("total_count"):
116
- return ("counter", "count")
117
- elif stat_id.startswith("network.sessions."):
118
- return ("gauge", "count")
119
- elif stat_id.startswith("memory."):
120
- # memory statistics are all gauges i think, describes how much memory currently allocated where
121
- return ("gauge", "bytes")
122
- elif stat_id.startswith("persistence.") or stat_id.startswith("disk"):
123
- # persistence are also all gauges, describes mostly how much is currently available/used on storage
124
- return ("gauge", "bytes")
125
- elif stat_id.startswith("license."):
126
- return ("gauge", None)
127
- elif stat_id.startswith("engine_"):
128
- return ("constant", None)
129
- elif async_pipeline_bytes_pattern.match(stat_id):
130
- return ("gauge", "bytes")
131
- elif async_pipeline_count_pattern.match(stat_id):
132
- return ("gauge", "count")
133
- else:
134
- return None
135
-
136
-
137
90
  def stat_type(stat_id):
138
91
  """
139
92
  Returns the statistic type by a stat id. Returns one of:
@@ -144,66 +97,193 @@ def stat_type(stat_id):
144
97
 
145
98
  This is useful for determining which value should be reported in a dashboard.
146
99
  """
147
- return _stat_type(stat_id)
148
-
100
+ import warnings
149
101
 
150
- def _calculate_delta_stat(stat_id, prev, cur):
151
- logger.info(
152
- "calculating delta for stat_id = {}, prev = {}. cur = {}".format(
153
- stat_id, prev, cur
154
- )
102
+ warnings.warn(
103
+ "The 'stat_type' method is deprecated and will be removed in a future release."
104
+ "The stat type and unit are now part of the return value of invocations to the 'of_node' and 'by_node' methods.",
105
+ DeprecationWarning,
106
+ stacklevel=2,
155
107
  )
156
108
 
157
- stat_type = _stat_type(stat_id)
158
- if stat_type == "counter":
159
- return cur - prev
160
- elif stat_type == "gauge":
161
- return cur
162
- else:
163
- return None
109
+ return None
164
110
 
165
111
 
166
- def _calculate_delta_stats(prev_stats, cur_stats):
167
- ret = {}
168
- for stat_id in cur_stats.keys():
169
- try:
170
- prev_stat = cur_stats[stat_id]
171
- cur_stat = cur_stats[stat_id]
112
+ def _get_all_keys(dconn, n=1024):
113
+ """
114
+ Returns all keys from a single node.
172
115
 
173
- value = _calculate_delta_stat(stat_id, prev_stat, cur_stat)
174
- if value is not None:
175
- ret[stat_id] = value
116
+ Parameters:
117
+ dconn: quasardb.Node
118
+ Direct node connection to the node we wish to connect to.
176
119
 
177
- except KeyError:
178
- # Stat likely was not present yet in prev_stats
179
- pass
120
+ n: int
121
+ Number of keys to retrieve.
122
+ """
123
+ xs = None
124
+ increase_rate = 8
125
+ # keep getting keys while number of results exceeds the given "n"
126
+ while xs is None or len(xs) >= n:
127
+ if xs is not None:
128
+ n = n * increase_rate
129
+ if n >= MAX_KEYS:
130
+ raise Exception(f"ERROR: Cannot fetch more than {MAX_KEYS} keys.")
131
+ xs = dconn.prefix_get(stats_prefix, n)
180
132
 
181
- return ret
133
+ return xs
134
+
135
+
136
+ class Type(Enum):
137
+ ACCUMULATOR = 1
138
+ GAUGE = 2
139
+ LABEL = 3
140
+
141
+
142
+ class Unit(Enum):
143
+ NONE = 0
144
+ COUNT = 1
145
+
146
+ # Size units
147
+ BYTES = 32
148
+
149
+ # Time/duration units
150
+ EPOCH = 64
151
+ NANOSECONDS = 65
152
+ MICROSECONDS = 66
153
+ MILLISECONDS = 67
154
+ SECONDS = 68
155
+
156
+
157
+ _type_string_to_enum = {
158
+ "accumulator": Type.ACCUMULATOR,
159
+ "gauge": Type.GAUGE,
160
+ "label": Type.LABEL,
161
+ }
162
+
163
+ _unit_string_to_enum = {
164
+ "none": Unit.NONE,
165
+ "count": Unit.COUNT,
166
+ "bytes": Unit.BYTES,
167
+ "epoch": Unit.EPOCH,
168
+ "nanoseconds": Unit.NANOSECONDS,
169
+ "microseconds": Unit.MICROSECONDS,
170
+ "milliseconds": Unit.MILLISECONDS,
171
+ "seconds": Unit.SECONDS,
172
+ }
173
+
174
+
175
+ def _lookup_enum(dconn, k, m):
176
+ """
177
+ Utility function to avoid code duplication: automatically looks up a key's value
178
+ from QuasarDB and looks it up in provided dict.
179
+ """
180
+
181
+ x = dconn.blob(k).get()
182
+ x = _clean_blob(x)
183
+
184
+ if x not in m:
185
+ raise Exception(f"Unrecognized unit/type {x} from key {k}")
186
+
187
+ return m[x]
182
188
 
183
189
 
184
- def calculate_delta(prev, cur):
190
+ def _lookup_type(dconn, k):
185
191
  """
186
- Calculates the 'delta' between two successive statistic measurements.
192
+ Looks up and parses/validates the metric type.
187
193
  """
188
- ret = {}
189
- for node_id in cur.keys():
190
- ret[node_id] = _calculate_delta_stats(
191
- prev[node_id]["cumulative"], cur[node_id]["cumulative"]
192
- )
194
+ assert k.endswith(".type")
195
+
196
+ return _lookup_enum(dconn, k, _type_string_to_enum)
197
+
198
+
199
+ def _lookup_unit(dconn, k):
200
+ """
201
+ Looks up and parses/validates the metric type.
202
+ """
203
+ assert k.endswith(".unit")
204
+
205
+ return _lookup_enum(dconn, k, _unit_string_to_enum)
206
+
207
+
208
+ def _index_keys(dconn, ks):
209
+ """
210
+ Takes all statistics keys that are retrieved, and "indexes" them in such a way
211
+ that we end up with a dict of all statistic keys, their type and their unit.
212
+ """
213
+
214
+ ###
215
+ # The keys generally look like this, for example:
216
+ #
217
+ # $qdb.statistics.requests.out_bytes
218
+ # $qdb.statistics.requests.out_bytes.type
219
+ # $qdb.statistics.requests.out_bytes.uid_1
220
+ # $qdb.statistics.requests.out_bytes.uid_1.type
221
+ # $qdb.statistics.requests.out_bytes.uid_1.unit
222
+ # $qdb.statistics.requests.out_bytes.unit
223
+ #
224
+ # For this purpose, we simply get rid of the "uid" part, as the per-uid metrics are guaranteed
225
+ # to be of the exact same type as all the others. So after trimming those, the keys will look
226
+ # like this:
227
+ #
228
+ # $qdb.statistics.requests.out_bytes
229
+ # $qdb.statistics.requests.out_bytes.type
230
+ # $qdb.statistics.requests.out_bytes
231
+ # $qdb.statistics.requests.out_bytes.type
232
+ # $qdb.statistics.requests.out_bytes.unit
233
+ # $qdb.statistics.requests.out_bytes.unit
234
+ #
235
+ # And after deduplication like this:
236
+ #
237
+ # $qdb.statistics.requests.out_bytes
238
+ # $qdb.statistics.requests.out_bytes.type
239
+ # $qdb.statistics.requests.out_bytes.unit
240
+ #
241
+ # In which case we'll store `requests.out_bytes` as the statistic type, and look up the type
242
+ # and unit for those metrics and add a placeholder value.
243
+
244
+ ret = defaultdict(lambda: {"value": None, "type": None, "unit": None})
245
+
246
+ for k in ks:
247
+ # Remove any 'uid_[0-9]+' part from the string
248
+ k_ = user_clean_pattern.sub("", k)
249
+
250
+ matches = total_pattern.match(k_)
251
+
252
+ parts = matches.groups()[0].rsplit(".", 1)
253
+ metric_id = parts[0]
254
+
255
+ if len(parts) > 1 and parts[1] == "type":
256
+ if ret[metric_id]["type"] == None:
257
+ # We haven't seen this particular statistic yet
258
+ ret[metric_id]["type"] = _lookup_type(dconn, k)
259
+ elif len(parts) > 1 and parts[1] == "unit":
260
+ if ret[metric_id]["unit"] == None:
261
+ # We haven't seen this particular statistic yet
262
+ ret[metric_id]["unit"] = _lookup_unit(dconn, k)
263
+ else:
264
+ # It's a value, we look those up later
265
+ pass
193
266
 
194
267
  return ret
195
268
 
196
269
 
197
270
  def _clean_blob(x):
271
+ """
272
+ Utility function that decodes a blob as an UTF-8 string, as the direct node C API
273
+ does not yet support 'string' types and as such all statistics are stored as blobs.
274
+ """
198
275
  x_ = x.decode("utf-8", "replace")
199
276
 
200
277
  # remove trailing zero-terminator
201
278
  return "".join(c for c in x_ if ord(c) != 0)
202
279
 
203
280
 
204
- def _get_stat(dconn, k):
281
+ def _get_stat_value(dconn, k):
205
282
  # Ugly, but works: try to retrieve as integer, if not an int, retrieve as
206
283
  # blob
284
+ #
285
+ # XXX(leon): we could use the index we built to get a much stronger hint
286
+ # on what the type is.
207
287
  try:
208
288
  return dconn.integer(k).get()
209
289
 
@@ -216,30 +296,63 @@ def _get_stat(dconn, k):
216
296
  return _clean_blob(dconn.blob(k).get())
217
297
 
218
298
 
219
- def _by_uid(stats):
299
+ def _by_uid(stats, idx):
220
300
  xs = {}
221
301
  for k, v in stats.items():
222
302
  matches = user_pattern.match(k)
223
303
  if is_user_stat(k) and matches:
224
304
  (metric, uid_str) = matches.groups()
305
+
306
+ if metric.split(".")[-1] in ["type", "unit"]:
307
+ # We already indexed the type and unit in our idx, this is not interesting
308
+ continue
309
+
310
+ if metric.startswith("serialized"):
311
+ # Internal stuff we don't care about nor cannot do anything with
312
+ continue
313
+
314
+ if not metric in idx:
315
+ raise Exception(f"Metric not in internal index: {metric}")
316
+
317
+ # Parse user id
225
318
  uid = int(uid_str)
319
+
320
+ # Prepare our metric dict
321
+ x = idx[metric].copy()
322
+ x["value"] = v
323
+
226
324
  if uid not in xs:
227
325
  xs[uid] = {}
228
326
 
229
- if not metric.startswith("serialized"):
230
- xs[uid][metric] = v
327
+ xs[uid][metric] = x
231
328
 
232
329
  return xs
233
330
 
234
331
 
235
- def _cumulative(stats):
332
+ def _cumulative(stats, idx):
236
333
  xs = {}
237
334
 
238
335
  for k, v in stats.items():
239
336
  matches = total_pattern.match(k)
240
337
  if is_cumulative_stat(k) and matches:
241
338
  metric = matches.groups()[0]
242
- if not metric.startswith("serialized"):
243
- xs[metric] = v
339
+
340
+ if metric.split(".")[-1] in ["type", "unit"]:
341
+ # We already indexed the type and unit in our idx, this is not interesting
342
+ continue
343
+
344
+ if metric.startswith("serialized"):
345
+ # Internal stuff we don't care about nor cannot do anything with
346
+ continue
347
+
348
+ if not metric in idx:
349
+ raise Exception(f"Metric not in internal index: {metric}")
350
+
351
+ x = idx[metric].copy()
352
+ x["value"] = v
353
+ xs[metric] = x
244
354
 
245
355
  return xs
356
+
357
+
358
+ # async_pipelines.buffer.total_bytes
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: quasardb
3
- Version: 3.14.2.dev5
3
+ Version: 3.14.2.dev7
4
4
  Summary: Python API for quasardb
5
5
  Home-page: https://www.quasardb.net/
6
6
  Author: quasardb SAS
@@ -35,6 +35,7 @@ Dynamic: classifier
35
35
  Dynamic: home-page
36
36
  Dynamic: keywords
37
37
  Dynamic: license
38
+ Dynamic: license-file
38
39
  Dynamic: provides-extra
39
40
  Dynamic: requires-dist
40
41
  Dynamic: summary
@@ -0,0 +1,69 @@
1
+ quasardb/Makefile,sha256=jHBajvb5wMPBPW3daerhbTOG4N-I8S1dKtGzEaYFixw,8316
2
+ quasardb/__init__.py,sha256=AVL-vz_zSEr6uoShycqB6r-1g5FXofTgQ_Yf1_l5Epg,4729
3
+ quasardb/__init__.pyi,sha256=O1gBZNZd3BYdSOZ_WaItU7lO10Jjj1I-yYimnDbU67s,1438
4
+ quasardb/cmake_install.cmake,sha256=NtLhadoRgPdpH-IzcLLIivZMMt7twc9JQJaU0MoTk7Q,1980
5
+ quasardb/firehose.py,sha256=_kSHuu2rTDHij1RpPLfsnbaiX_rSw-hurhBw54VNS2w,3350
6
+ quasardb/libqdb_api.dylib,sha256=v7cuLm3eJZZMJtGPrDnvPqv9i6v0tV1V5AmsxaYRNco,47685088
7
+ quasardb/pool.py,sha256=A3SZzlSLgEJXhBeIgKJYK8yBVR9cMyC8lxU1wLhKo_Y,8598
8
+ quasardb/quasardb.cpython-310-darwin.so,sha256=FnhIu40J8rxsQvOcQO1C9iGbWmxstHFHI68Ki7Y18bI,901632
9
+ quasardb/stats.py,sha256=XfMBSQoFbTNAFeyElhAXQRVFueHscmf5cg4zKSWnY2I,9750
10
+ quasardb/table_cache.py,sha256=gYX4wqx4v4uKUE-GE24g-ZOi-OtE67IVDdUcNCIik-w,1511
11
+ quasardb/CMakeFiles/CMakeDirectoryInformation.cmake,sha256=08gAbKtpSxLn0t1X3RoAEw1QFUJE8jcTRsBwtt4ebAU,731
12
+ quasardb/CMakeFiles/progress.marks,sha256=micfKpFrC27mzsskJvCzIG7wdFeL5V2byU9vP-Orhqo,2
13
+ quasardb/date/Makefile,sha256=ukucrTNmA2IN6LywkiJAiJ4sXjmEm5d_DuCX-TOjcE0,8341
14
+ quasardb/date/cmake_install.cmake,sha256=ksclM1tLhRPkmHaYtfwklbai3V_H3ArOGQjYij0w-Uk,3561
15
+ quasardb/date/dateConfigVersion.cmake,sha256=rL5Cp_r_23Yu8HmjowwKIH04sxxMwdBZ7no3tr4cx14,2762
16
+ quasardb/date/dateTargets.cmake,sha256=andjNgVitf008amH6Qwyq2NLlVeyVGl7hJMQH6t772U,2869
17
+ quasardb/date/CMakeFiles/CMakeDirectoryInformation.cmake,sha256=08gAbKtpSxLn0t1X3RoAEw1QFUJE8jcTRsBwtt4ebAU,731
18
+ quasardb/date/CMakeFiles/progress.marks,sha256=micfKpFrC27mzsskJvCzIG7wdFeL5V2byU9vP-Orhqo,2
19
+ quasardb/date/CMakeFiles/Export/a52b05f964b070ee926bcad51d3288af/dateTargets.cmake,sha256=QHGjawFaQWDEnJp-O3j5mkytsHjSQurPEpGddDLa_5s,4211
20
+ quasardb/extensions/__init__.py,sha256=FUHR0i62qt5NkOXn7eiMZrzWXo9mQNr1xVz3VSCa9QU,112
21
+ quasardb/extensions/writer.py,sha256=uRL4fVkucd7vwdFySnPLpH4DuNK4bVtXCSRxQk4YJ-g,5567
22
+ quasardb/numpy/__init__.py,sha256=9sS2XyQcmbZxtcTesc2BBlBCJNtCubqgXOCuJAxAx2E,34420
23
+ quasardb/pandas/__init__.py,sha256=GtwhNrDkfiyibfv6PxR3LzVa2vMn7cpxvzuXkPrZesU,17433
24
+ quasardb/pybind11/Makefile,sha256=Wz06qyZwNvvE1YfeO4_-zCwNSi5Rk9KxaxTrrgCI4_Q,8361
25
+ quasardb/pybind11/cmake_install.cmake,sha256=2V7rCKkZrUx8_73DVwx0QuAV_akX3EpwGNWkeH20pOc,1485
26
+ quasardb/pybind11/CMakeFiles/CMakeDirectoryInformation.cmake,sha256=08gAbKtpSxLn0t1X3RoAEw1QFUJE8jcTRsBwtt4ebAU,731
27
+ quasardb/pybind11/CMakeFiles/progress.marks,sha256=micfKpFrC27mzsskJvCzIG7wdFeL5V2byU9vP-Orhqo,2
28
+ quasardb/quasardb/__init__.pyi,sha256=GE1wGHJFQDODwHzsjbH6JqUXJllz6e6WeonXDqapR6k,2160
29
+ quasardb/quasardb/_batch_column.pyi,sha256=BVfOELOFlGvkG79KCW_9MuV5KQukaWBKCLpeyUddez0,173
30
+ quasardb/quasardb/_batch_inserter.pyi,sha256=l4wuspVydft0SJWBL_bGKnjGtCf2cDOZIrG78IfEeKw,1081
31
+ quasardb/quasardb/_blob.pyi,sha256=fVpF69GoOlgY20PDPL3m0YVIVDdwyCbYElFwApfU5R8,524
32
+ quasardb/quasardb/_cluster.pyi,sha256=Ozc0fb7wA5Gn1B6rLg7PSNRimeCm3C_QpnDiQmAKlHg,3864
33
+ quasardb/quasardb/_continuous.pyi,sha256=iSju01ayM66fsGlcQjDNNb-pftSdAIovWj0l9HrcIRg,486
34
+ quasardb/quasardb/_double.pyi,sha256=RRCygCQByWD20yrEXIYt0AcmZiKytxflDEthWv8Ykf8,240
35
+ quasardb/quasardb/_entry.pyi,sha256=WgxhDqssNQqPWlIiiMNsVSXTSq2ni5kGKDTzWSH8IRQ,2531
36
+ quasardb/quasardb/_error.pyi,sha256=DVMLFtN7m-tRHVx2AhZm2WPjKn5ZeJd6PDKUeXwp-b4,564
37
+ quasardb/quasardb/_integer.pyi,sha256=3zMfrdJZ6fZj9RMpwe9mWFCoAoccOuASi3yMaq83gSc,233
38
+ quasardb/quasardb/_node.pyi,sha256=tYSQeNoKEkFlbj-8GpCRtwlPALAyzSVTuWjS07e08GQ,835
39
+ quasardb/quasardb/_options.pyi,sha256=zosb_CZqLvuKLp43UQ0H2uC4q2R7btLDC2uID6NgiXo,4657
40
+ quasardb/quasardb/_perf.pyi,sha256=3ryBZXFuRd29258HHZz6euXT6P-i6G8yBgs6vQge0ug,187
41
+ quasardb/quasardb/_properties.pyi,sha256=Im03-ildL2w5VhcuNmDAWnkKY8BTkm9mQlL4rg15MhU,195
42
+ quasardb/quasardb/_query.pyi,sha256=cFTvl0SQvtGd4lAofcBlOoP2E0ZmWymGI4JSvVXpA8A,53
43
+ quasardb/quasardb/_reader.pyi,sha256=Yb6Mew9Y43DH2k5I4kdGz5G00e5ltA6Zr22m9m3xqNU,300
44
+ quasardb/quasardb/_retry.pyi,sha256=Arb964aoqf4rk6YY5_R0dpa-rU7RsCjp6Cn1C2A2xsM,375
45
+ quasardb/quasardb/_string.pyi,sha256=NK9JBMtR1bQNel3T5kjNhTiJuYh-tJhC8rrG-2VUtgM,456
46
+ quasardb/quasardb/_table.pyi,sha256=in6LVORrkbed1NRzdjpiFN6juViTuHEtsPue5eUoVY8,4735
47
+ quasardb/quasardb/_tag.pyi,sha256=E-9aYCtv_PI83YHfE9Lt1dnGqoMTg7MHhDKbTlMfFU8,121
48
+ quasardb/quasardb/_timestamp.pyi,sha256=vCjArhHfBvpeNlnxF6cSgSixgbDG2qJPeS7ECJzUV5E,326
49
+ quasardb/quasardb/_writer.pyi,sha256=N_qMi3-v3Rem0bShp9Nz3BNAnRhe1lyEgnKvlXNrVts,3495
50
+ quasardb/quasardb/metrics/__init__.pyi,sha256=IJpl9woTGczp0cgBZxHe1DDf_dnTPphUECVhazQ8Crg,476
51
+ quasardb/range-v3/Makefile,sha256=BC9td977suKjkh_A1tWACnD0M3jdbxmTHIcO0jepmXw,9730
52
+ quasardb/range-v3/cmake_install.cmake,sha256=UnarsBig9E5imy_7b9pVFRvnYd51G-UlpwWOEQRQkwk,4531
53
+ quasardb/range-v3/range-v3-config-version.cmake,sha256=xGi8nCg5dIl5VmCOtTEVVa-dwABxKxLEd1Mx-bUvLLM,3249
54
+ quasardb/range-v3/range-v3-config.cmake,sha256=3AFIzkaCzdFLuLpvQzhxlzBA-du_66jisQkIIlf6nuU,3423
55
+ quasardb/range-v3/CMakeFiles/CMakeDirectoryInformation.cmake,sha256=08gAbKtpSxLn0t1X3RoAEw1QFUJE8jcTRsBwtt4ebAU,731
56
+ quasardb/range-v3/CMakeFiles/progress.marks,sha256=micfKpFrC27mzsskJvCzIG7wdFeL5V2byU9vP-Orhqo,2
57
+ quasardb/range-v3/CMakeFiles/Export/d94ef200eca10a819b5858b33e808f5b/range-v3-targets.cmake,sha256=vUOVk2QA2ZyV4o7G3ws9ebAACryLJXa7lrE24yvVP14,5265
58
+ quasardb/range-v3/CMakeFiles/range.v3.headers.dir/DependInfo.cmake,sha256=ssojOAtcndfwexIOMvsRoVek3vdNgBmUVZscjIj5L1U,585
59
+ quasardb/range-v3/CMakeFiles/range.v3.headers.dir/build.make,sha256=Y2PmzheaOe87njnyRiu9htMlYM3CoijmBbD0w4u0fqs,4458
60
+ quasardb/range-v3/CMakeFiles/range.v3.headers.dir/cmake_clean.cmake,sha256=3b0pZoiofoRzAiY1l7OLw203ZXp-mm1FUlQHob6i7aU,160
61
+ quasardb/range-v3/CMakeFiles/range.v3.headers.dir/compiler_depend.make,sha256=Oge9eptzOB-hllw_Tye4o5wiXsIsdq1xm1GGCe0oGFM,126
62
+ quasardb/range-v3/CMakeFiles/range.v3.headers.dir/compiler_depend.ts,sha256=orKrKpvHulgFBjBgzdeRvCpv0fV7cTffTdaHNqijFJg,120
63
+ quasardb/range-v3/CMakeFiles/range.v3.headers.dir/progress.make,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
64
+ quasardb/range-v3/include/range/v3/version.hpp,sha256=d-ToEdR3GnC_p_0RAeS77xL-SVx6EKHgTlWJ9PUQlSQ,586
65
+ quasardb-3.14.2.dev7.dist-info/licenses/LICENSE.md,sha256=_drOadIrIX8mzUZcnTJBTpUQih5gwdRAGK8ZKanYD6k,1467
66
+ quasardb-3.14.2.dev7.dist-info/METADATA,sha256=EMtC_EMGBOedaQVmq1xXQpxk5p-E7jyOFiJkHxiBE2g,1465
67
+ quasardb-3.14.2.dev7.dist-info/WHEEL,sha256=wyHf6UDzyHyUK-aDYscyyyExpYI7SeEZ9xjyEiU4cnw,109
68
+ quasardb-3.14.2.dev7.dist-info/top_level.txt,sha256=wlprix4hCywuF1PkgKWYdZeJKq_kgJOqkAvukm_sZQ8,9
69
+ quasardb-3.14.2.dev7.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp310-cp310-macosx_11_0_arm64
5
5
 
@@ -1,45 +0,0 @@
1
- quasardb/Makefile,sha256=Lu4JISHiFe3az5JvEu4u-wqVrYJDHb8FTgfXn_9apJM,8317
2
- quasardb/__init__.py,sha256=x_gazIFMlZ35Op_6Dh0YuKhslM9GlVH2UfjluLsMwf4,4614
3
- quasardb/cmake_install.cmake,sha256=NKgaWYKF6N2pHhDQ_cYn4iKMkWsVckMuAy5Izt1UrP0,1999
4
- quasardb/firehose.py,sha256=_kSHuu2rTDHij1RpPLfsnbaiX_rSw-hurhBw54VNS2w,3350
5
- quasardb/libqdb_api.dylib,sha256=8ThPKhWDokAYMHIeLEe0cXKIBOIiq3tkYtrJf-HrFx4,36197568
6
- quasardb/pool.py,sha256=ph4gxwaOcvQ0QqrTO9oVu5Vqy-7t1CweakrgfsmvprM,8474
7
- quasardb/quasardb.cpython-310-darwin.so,sha256=F99a1ezBsr_xgqVuvcYELCvU5iiY9RQHaDJZk-gRnSM,917392
8
- quasardb/stats.py,sha256=SoLZzsD2sw4vdHSfqK4dyrGxDzjlVzbboKCpDeYOXbc,7294
9
- quasardb/table_cache.py,sha256=gYX4wqx4v4uKUE-GE24g-ZOi-OtE67IVDdUcNCIik-w,1511
10
- quasardb/CMakeFiles/CMakeDirectoryInformation.cmake,sha256=re2TdpOjaQi-AELq4tNwr43AX1d8s9HtTv1AXWhGcjI,732
11
- quasardb/CMakeFiles/progress.marks,sha256=micfKpFrC27mzsskJvCzIG7wdFeL5V2byU9vP-Orhqo,2
12
- quasardb/date/Makefile,sha256=ur7v2FbF2zfqbx_EYx5bECeE97KHFOV8EBvWIaQV6bY,8342
13
- quasardb/date/cmake_install.cmake,sha256=2p05_S1sSN93MwPDOoN9bEzMI5pboaL84pHoeDSrcRc,3580
14
- quasardb/date/dateConfigVersion.cmake,sha256=rL5Cp_r_23Yu8HmjowwKIH04sxxMwdBZ7no3tr4cx14,2762
15
- quasardb/date/dateTargets.cmake,sha256=UTTH7zSPDb_tkscV25dahdEEX0Bw_t2SozDUBKy7mHI,2869
16
- quasardb/date/CMakeFiles/CMakeDirectoryInformation.cmake,sha256=re2TdpOjaQi-AELq4tNwr43AX1d8s9HtTv1AXWhGcjI,732
17
- quasardb/date/CMakeFiles/progress.marks,sha256=micfKpFrC27mzsskJvCzIG7wdFeL5V2byU9vP-Orhqo,2
18
- quasardb/date/CMakeFiles/Export/a52b05f964b070ee926bcad51d3288af/dateTargets.cmake,sha256=rWNkRmrNRa8_x5hIZdFw8rJ_aLoigP5fUoRmXaKSyys,4211
19
- quasardb/extensions/__init__.py,sha256=FUHR0i62qt5NkOXn7eiMZrzWXo9mQNr1xVz3VSCa9QU,112
20
- quasardb/extensions/writer.py,sha256=uRL4fVkucd7vwdFySnPLpH4DuNK4bVtXCSRxQk4YJ-g,5567
21
- quasardb/numpy/__init__.py,sha256=N-RIdmUPVUsxTe_Og3v1jv2tO3nCjyP2yUC9bKU2Iag,30581
22
- quasardb/pandas/__init__.py,sha256=HXzFKT-nmkG65jcA850GgB8Toc9ArVwtAF4LQA5iW_M,15989
23
- quasardb/pybind11/Makefile,sha256=8syFHNGbenZL6cMvAU0ucBMGJF3-jPKpIMmHg376iGY,8362
24
- quasardb/pybind11/cmake_install.cmake,sha256=5C7caU2Zz5V7rMf6PLg3ucstPO02H_H9_6c9BH7lKrI,1504
25
- quasardb/pybind11/CMakeFiles/CMakeDirectoryInformation.cmake,sha256=re2TdpOjaQi-AELq4tNwr43AX1d8s9HtTv1AXWhGcjI,732
26
- quasardb/pybind11/CMakeFiles/progress.marks,sha256=micfKpFrC27mzsskJvCzIG7wdFeL5V2byU9vP-Orhqo,2
27
- quasardb/range-v3/Makefile,sha256=7b0cG5Dg2ufUK3fCZyrSW_A_bCAu_Ya3XwHgKubIUVU,9731
28
- quasardb/range-v3/cmake_install.cmake,sha256=-It3XzKnIl2KBn44NLkno0Q7it5YzkkpHwMlU2Iasbk,4550
29
- quasardb/range-v3/range-v3-config-version.cmake,sha256=xGi8nCg5dIl5VmCOtTEVVa-dwABxKxLEd1Mx-bUvLLM,3249
30
- quasardb/range-v3/range-v3-config.cmake,sha256=iiZBJD9yisikJNYDR84f3siZY7xRddr6z48_0R5jj7c,3423
31
- quasardb/range-v3/CMakeFiles/CMakeDirectoryInformation.cmake,sha256=re2TdpOjaQi-AELq4tNwr43AX1d8s9HtTv1AXWhGcjI,732
32
- quasardb/range-v3/CMakeFiles/progress.marks,sha256=micfKpFrC27mzsskJvCzIG7wdFeL5V2byU9vP-Orhqo,2
33
- quasardb/range-v3/CMakeFiles/Export/d94ef200eca10a819b5858b33e808f5b/range-v3-targets.cmake,sha256=V-vcw4htrvk0Sf8A5IKO2_meFGd26tUGbt-Y2R8kZk4,5265
34
- quasardb/range-v3/CMakeFiles/range.v3.headers.dir/DependInfo.cmake,sha256=ssojOAtcndfwexIOMvsRoVek3vdNgBmUVZscjIj5L1U,585
35
- quasardb/range-v3/CMakeFiles/range.v3.headers.dir/build.make,sha256=S5LKboGd1RHrtNARVxASF4nQrcaSrV728VMWGRJJDEg,4459
36
- quasardb/range-v3/CMakeFiles/range.v3.headers.dir/cmake_clean.cmake,sha256=3b0pZoiofoRzAiY1l7OLw203ZXp-mm1FUlQHob6i7aU,160
37
- quasardb/range-v3/CMakeFiles/range.v3.headers.dir/compiler_depend.make,sha256=Oge9eptzOB-hllw_Tye4o5wiXsIsdq1xm1GGCe0oGFM,126
38
- quasardb/range-v3/CMakeFiles/range.v3.headers.dir/compiler_depend.ts,sha256=orKrKpvHulgFBjBgzdeRvCpv0fV7cTffTdaHNqijFJg,120
39
- quasardb/range-v3/CMakeFiles/range.v3.headers.dir/progress.make,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
40
- quasardb/range-v3/include/range/v3/version.hpp,sha256=d-ToEdR3GnC_p_0RAeS77xL-SVx6EKHgTlWJ9PUQlSQ,586
41
- quasardb-3.14.2.dev5.dist-info/LICENSE.md,sha256=_drOadIrIX8mzUZcnTJBTpUQih5gwdRAGK8ZKanYD6k,1467
42
- quasardb-3.14.2.dev5.dist-info/METADATA,sha256=zRtHEBSC3to6u7sCd2cZoSyf4XLlDr7KE1_2cVlTd2U,1443
43
- quasardb-3.14.2.dev5.dist-info/WHEEL,sha256=ezfKMaDztqf77C8lvQ0NCnZxkTaOaKLprqJ8q932MhU,109
44
- quasardb-3.14.2.dev5.dist-info/top_level.txt,sha256=wlprix4hCywuF1PkgKWYdZeJKq_kgJOqkAvukm_sZQ8,9
45
- quasardb-3.14.2.dev5.dist-info/RECORD,,