quasardb 3.14.2.dev5__cp312-cp312-win32.whl → 3.14.2.dev7__cp312-cp312-win32.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 (52) hide show
  1. quasardb/INSTALL.vcxproj +5 -5
  2. quasardb/__init__.py +8 -5
  3. quasardb/__init__.pyi +72 -0
  4. quasardb/date/ALL_BUILD.vcxproj +9 -9
  5. quasardb/date/CMakeFiles/Export/df49adab93b9e0c10c64f72458b31971/dateTargets.cmake +1 -1
  6. quasardb/date/CMakeFiles/generate.stamp.depend +4 -4
  7. quasardb/date/INSTALL.vcxproj +5 -5
  8. quasardb/date/dateTargets.cmake +1 -1
  9. quasardb/numpy/__init__.py +126 -43
  10. quasardb/pandas/__init__.py +55 -20
  11. quasardb/pool.py +6 -0
  12. quasardb/pybind11/ALL_BUILD.vcxproj +9 -9
  13. quasardb/pybind11/CMakeFiles/generate.stamp.depend +14 -14
  14. quasardb/pybind11/INSTALL.vcxproj +5 -5
  15. quasardb/qdb_api.dll +0 -0
  16. quasardb/quasardb/__init__.pyi +97 -0
  17. quasardb/quasardb/_batch_column.pyi +5 -0
  18. quasardb/quasardb/_batch_inserter.pyi +30 -0
  19. quasardb/quasardb/_blob.pyi +16 -0
  20. quasardb/quasardb/_cluster.pyi +100 -0
  21. quasardb/quasardb/_continuous.pyi +16 -0
  22. quasardb/quasardb/_double.pyi +7 -0
  23. quasardb/quasardb/_entry.pyi +60 -0
  24. quasardb/quasardb/_error.pyi +15 -0
  25. quasardb/quasardb/_integer.pyi +7 -0
  26. quasardb/quasardb/_node.pyi +26 -0
  27. quasardb/quasardb/_options.pyi +105 -0
  28. quasardb/quasardb/_perf.pyi +5 -0
  29. quasardb/quasardb/_properties.pyi +5 -0
  30. quasardb/quasardb/_query.pyi +2 -0
  31. quasardb/quasardb/_reader.pyi +9 -0
  32. quasardb/quasardb/_retry.pyi +16 -0
  33. quasardb/quasardb/_string.pyi +12 -0
  34. quasardb/quasardb/_table.pyi +125 -0
  35. quasardb/quasardb/_tag.pyi +5 -0
  36. quasardb/quasardb/_timestamp.pyi +9 -0
  37. quasardb/quasardb/_writer.pyi +111 -0
  38. quasardb/quasardb/metrics/__init__.pyi +20 -0
  39. quasardb/quasardb.cp312-win32.pyd +0 -0
  40. quasardb/range-v3/ALL_BUILD.vcxproj +9 -9
  41. quasardb/range-v3/CMakeFiles/Export/d94ef200eca10a819b5858b33e808f5b/range-v3-targets.cmake +1 -1
  42. quasardb/range-v3/CMakeFiles/generate.stamp.depend +11 -11
  43. quasardb/range-v3/INSTALL.vcxproj +5 -5
  44. quasardb/range-v3/range-v3-config.cmake +1 -1
  45. quasardb/range-v3/range.v3.headers.vcxproj +9 -9
  46. quasardb/stats.py +223 -110
  47. {quasardb-3.14.2.dev5.dist-info → quasardb-3.14.2.dev7.dist-info}/METADATA +3 -2
  48. quasardb-3.14.2.dev7.dist-info/RECORD +78 -0
  49. {quasardb-3.14.2.dev5.dist-info → quasardb-3.14.2.dev7.dist-info}/WHEEL +1 -1
  50. quasardb-3.14.2.dev5.dist-info/RECORD +0 -54
  51. {quasardb-3.14.2.dev5.dist-info → quasardb-3.14.2.dev7.dist-info/licenses}/LICENSE.md +0 -0
  52. {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,78 @@
1
+ quasardb/INSTALL.vcxproj,sha256=UUwa_bjSUpbUk-HWVWPZqXPgyXHw6J0enUkDMo11JlM,11123
2
+ quasardb/INSTALL.vcxproj.filters,sha256=vyRJK34_t9Jx9ALzR5QY6_Eru6oU4Ozu8BXM9Ad3j4o,561
3
+ quasardb/__init__.py,sha256=AwvpHgNVtgXGAc9nQ1u-RIleIP3seyUI8dgp4n1ISiM,4869
4
+ quasardb/__init__.pyi,sha256=klihc7MgPh3jm-vgweiab63avMNB-aI49pxeL2q-bxQ,1510
5
+ quasardb/cmake_install.cmake,sha256=svEWhToWXGZuDWNMoqnU2iLYUfyo9YUJn4jtdzq6O74,1792
6
+ quasardb/firehose.py,sha256=thpTQktgzyY9nTk7vnxckSIZcUATgfkPrBheOLvK1SI,3453
7
+ quasardb/pool.py,sha256=ubuPvS2EkAu5l1bxtGj34rp9wO8w31RAdHFAtchjWBQ,8909
8
+ quasardb/qdb_api.dll,sha256=XjdVosbl_SXuyV0QLW3LXdLNaiYo9As_9DxNhM_Zqgk,23381504
9
+ quasardb/quasardb.cp312-win32.pyd,sha256=m1Sh8phd6Nr5gh8TXjLkyJEuryTCV67IGrJ7fgpCSCI,1202176
10
+ quasardb/stats.py,sha256=VLPzV0MwYWD5m06WYlZ2Yy_m1WD1XL8v81P2DPdfpvI,10108
11
+ quasardb/table_cache.py,sha256=9XdHrWb_zpC9gikyZJhFX1qy5rMUc7o7uEPKfyZHjVY,1567
12
+ quasardb/CMakeFiles/generate.stamp,sha256=MC9-mgyGPAS3QAZa3gHSQ8dYfXJy_Hn7AChwEoqVWOs,55
13
+ quasardb/CMakeFiles/generate.stamp.depend,sha256=uY8FV-ceJ2Kk-6JfOnsIesDV7jKoUNfkKHNY2Nf7_E8,117
14
+ quasardb/date/ALL_BUILD.vcxproj,sha256=l4UMHgNohhCWUHFwOmgQ-S_5DJGXXUeoDZR781tdxto,14284
15
+ quasardb/date/ALL_BUILD.vcxproj.filters,sha256=lTQk5MABpmIlZcZqriqmw7SlGUJKSM2xH8HnaKmgC5E,304
16
+ quasardb/date/INSTALL.vcxproj,sha256=7MUiVwLvbLakhlVPikQVfSrenjy--fa-q3DzDTY9K6I,11148
17
+ quasardb/date/INSTALL.vcxproj.filters,sha256=PrBZnivQu3IrWYaILir0ZO7TH4UBY0SCuCZdIN6LwbY,561
18
+ quasardb/date/cmake_install.cmake,sha256=zLfJkhFwizj1hZug5WLWJR5pu_bJ0_yWhPPsgrIqRSo,3312
19
+ quasardb/date/date.sln,sha256=bNHGcg2vZ2TvSX4RKoKmEdlGnpgGbe-Htqujh0xIdXc,3753
20
+ quasardb/date/dateConfigVersion.cmake,sha256=gMHG49AUzfjGGWxNIwxVKqMNUhKftzyhUHHWjn3AXCY,2827
21
+ quasardb/date/dateTargets.cmake,sha256=KLcAHy95WvaAmGFOkLx6sr0baTtxWhgK6qK-KYGtReU,2842
22
+ quasardb/date/CMakeFiles/generate.stamp,sha256=MC9-mgyGPAS3QAZa3gHSQ8dYfXJy_Hn7AChwEoqVWOs,55
23
+ quasardb/date/CMakeFiles/generate.stamp.depend,sha256=wJ1NNDrt6TXiWg-0oqOIopZtu9R5dGp41Z-yxyxPuvI,650
24
+ quasardb/date/CMakeFiles/Export/df49adab93b9e0c10c64f72458b31971/dateTargets.cmake,sha256=grs3misrnpYK8VHCO1TmA2hE8IHq3hogMPwtzQ4xQ9A,4189
25
+ quasardb/extensions/__init__.py,sha256=zvMxXV_zuRSbNrkjsu-qFSEiZahdHmC0lhMqMVRzY_8,120
26
+ quasardb/extensions/writer.py,sha256=DWpm4qqBGtunIPyNuRLtUWouL_Tmr3_Zs3K5c0JtH04,5758
27
+ quasardb/numpy/__init__.py,sha256=FWXkkp9Sfbs0JB8M565ymCMNZ6c6REMMyq4b9lFgAI8,35465
28
+ quasardb/pandas/__init__.py,sha256=p3iryOQmO8fceSRm_tNecrhZcpW6rYm9zxIPQkVRzCw,17966
29
+ quasardb/pybind11/ALL_BUILD.vcxproj,sha256=QDQ_o5iB9ApdKw758FlILoPnYwSlF_CSiw8qJFKullQ,20724
30
+ quasardb/pybind11/ALL_BUILD.vcxproj.filters,sha256=WjgQPMVZN7jEaUOdw8Ha03hPfNxybvx_F2wOck10Kqo,308
31
+ quasardb/pybind11/INSTALL.vcxproj,sha256=5nnvYk_01huCfP3NfJumrdzakw5kZkxoy8PWCvet70Y,11168
32
+ quasardb/pybind11/INSTALL.vcxproj.filters,sha256=5WE_V9rvNvvs-QCXclC9P1Dcbh0L6DcXzwz-XUH24hY,561
33
+ quasardb/pybind11/cmake_install.cmake,sha256=8r81ZB6zHoaWzRpMF8urhB0y9-kJQrc9bIsMZdqK6Ok,1370
34
+ quasardb/pybind11/pybind11.sln,sha256=uqKma4yOZL-mmZZ9q9dDieRJObPLVX_NYV_ROhFtt_g,3753
35
+ quasardb/pybind11/CMakeFiles/generate.stamp,sha256=MC9-mgyGPAS3QAZa3gHSQ8dYfXJy_Hn7AChwEoqVWOs,55
36
+ quasardb/pybind11/CMakeFiles/generate.stamp.depend,sha256=k5f08msl5yPD6zg8ZbvQIZjqS6RQnAgK_IxPpWsQ0JQ,2265
37
+ quasardb/quasardb/__init__.pyi,sha256=4AImMfpu7zNJcFsZ2h8mz8G8Q0EsrEmH0_Lom5GC42w,2257
38
+ quasardb/quasardb/_batch_column.pyi,sha256=cUmSvgsx695M3qHLI1gO-w4WXjGpS5J7pMLcCE4ezPE,178
39
+ quasardb/quasardb/_batch_inserter.pyi,sha256=AsnHiNoK4H4ZQN2Tkqgpm6bpSuKVW5DMbzSRrZ_Moq0,1111
40
+ quasardb/quasardb/_blob.pyi,sha256=S3eQ6SN3fN82g0JsarpFKdBSjhQazXS6ausMS5m0f7k,540
41
+ quasardb/quasardb/_cluster.pyi,sha256=uMa0B9KummFhs54XO78d_kGFzKBAJGNSoN2PaAWfRXY,3964
42
+ quasardb/quasardb/_continuous.pyi,sha256=NZyS2wW-94Z1a4enRZ2E9kPsGqFOAqsCAL79MeeiTYY,502
43
+ quasardb/quasardb/_double.pyi,sha256=OREzjImLfGtrQBCPwTLNUwWCNPT_0qWlu83abd6GEvs,247
44
+ quasardb/quasardb/_entry.pyi,sha256=PzE-HJSRFK0m2J6AC4cRyNN3d7mp7pvPVdAdd9QkZcw,2591
45
+ quasardb/quasardb/_error.pyi,sha256=ln6zc59SubXHCPb8Dffw9yB3EvlXKTzNyPLQfCgT0-Y,579
46
+ quasardb/quasardb/_integer.pyi,sha256=tptlwM9DMo_ml-qUYKZgjylZSsQV0Q-sPvVlWDmI1_k,240
47
+ quasardb/quasardb/_node.pyi,sha256=l211eWPS8Cjqktk8sTkVMAaagkRESl4GVtQErK3q2ko,861
48
+ quasardb/quasardb/_options.pyi,sha256=S_xD1f71eNlGeOU5B6p_Cnr75HdzZSgT1NiDut8TVoE,4762
49
+ quasardb/quasardb/_perf.pyi,sha256=sm67Ahh6Ak_O4-HsGKm3Hz3VAJ7FUFPaqGX8UyEousc,192
50
+ quasardb/quasardb/_properties.pyi,sha256=C0cydTTXuoDta3C6jiPcCa7JqkbqcysPCDvivBR5Lqs,200
51
+ quasardb/quasardb/_query.pyi,sha256=-QVWQsv77DqH14M0M2VE2VBahn37hWrefhrUuVEMt2k,55
52
+ quasardb/quasardb/_reader.pyi,sha256=DfS1LLU06aaGCESQC1M2Sffhy-rbRBxIU98vsqfTEfo,309
53
+ quasardb/quasardb/_retry.pyi,sha256=Uh_QlwVs2niIlG0rLzEwGba7fABNB53WeJTBF4HJkUk,391
54
+ quasardb/quasardb/_string.pyi,sha256=13L28veORGhq3zYUTQkmzBjJVLpSlfoHkClxDFeXOqU,468
55
+ quasardb/quasardb/_table.pyi,sha256=nkHoGCLogtAwKaJGQP9e5gFn61sJRDw94ZKfLlYw5p4,4860
56
+ quasardb/quasardb/_tag.pyi,sha256=l6vQpcYuWuX-gcjOmI7f1JFZPnNoFipu_QXCuY87mfQ,126
57
+ quasardb/quasardb/_timestamp.pyi,sha256=epTq7Iw-0F1JUiN6PWrqMgoYUZkGNZlzxIa3JYf2I0Q,335
58
+ quasardb/quasardb/_writer.pyi,sha256=02v7L4cCDp9RNSLDy6eLQTBxfkImoE5A0XN2rAWxeRU,3606
59
+ quasardb/quasardb/metrics/__init__.pyi,sha256=UQwAAB6O7pEJwo-Pj9vsxgbAj7kOmTyyopHxJhOAkTk,496
60
+ quasardb/range-v3/ALL_BUILD.vcxproj,sha256=M7junJjTxtdJBhZpsKS4coCtNGeSKvhGhpsOjMIr-Bc,19264
61
+ quasardb/range-v3/ALL_BUILD.vcxproj.filters,sha256=c0k-3qrBreLvjffsj9pJo50YOMqfDYnxLpBqvV1nI00,308
62
+ quasardb/range-v3/INSTALL.vcxproj,sha256=P2HxMjBmSVOMusWRsq44qfym1IuMFlHDHmgkVKQYyG8,11168
63
+ quasardb/range-v3/INSTALL.vcxproj.filters,sha256=44Gd8JK4VxYUyw1cfO0W08niOShmVmla-IKFgCNqvgU,561
64
+ quasardb/range-v3/Range-v3.sln,sha256=1GYAm1qFb6iOkZr53ppIrE9UTd9en3FeRngd-c41qHc,4615
65
+ quasardb/range-v3/cmake_install.cmake,sha256=wYOYhmHINuB7ViFWCDvz9iNXxhx59sQBURoRYrkmEjA,6910
66
+ quasardb/range-v3/range-v3-config-version.cmake,sha256=57XQ96x5Ec1VvRfoIPND_DSMJ9ZbHUqa8iZEiS0YMvw,3332
67
+ quasardb/range-v3/range-v3-config.cmake,sha256=k4-vOOoSmgxSLPMUtxOmpCcMG4CZZFWLes5nxKKfM64,3458
68
+ quasardb/range-v3/range.v3.headers.vcxproj,sha256=P56kg6fbsq0pgSRDkZXc-sMvW4DYFiI22wdaYc8vBT8,58946
69
+ quasardb/range-v3/range.v3.headers.vcxproj.filters,sha256=ncoReu6CX6QMQpsLM7zSZ967VtNJGewQCRAGE4i_wuU,51825
70
+ quasardb/range-v3/CMakeFiles/generate.stamp,sha256=MC9-mgyGPAS3QAZa3gHSQ8dYfXJy_Hn7AChwEoqVWOs,55
71
+ quasardb/range-v3/CMakeFiles/generate.stamp.depend,sha256=5oTPSC4BovBmApOLMXjDx-CZbcJFSRFaTG4P0XROqew,1898
72
+ quasardb/range-v3/CMakeFiles/Export/d94ef200eca10a819b5858b33e808f5b/range-v3-targets.cmake,sha256=hnwSrSd7ms1EMl4MBRQbZ9aBxnUww_ECcTzDQXR7qPU,5393
73
+ quasardb/range-v3/include/range/v3/version.hpp,sha256=jy6iEzXjaavicAw1VSIfvpS7Wu9IoEY51Q5N9m4eaB8,610
74
+ quasardb-3.14.2.dev7.dist-info/licenses/LICENSE.md,sha256=0iT1ltzDof6cJr8mSX2PVOGhKjISfCrOYzJg7rG2pOs,1477
75
+ quasardb-3.14.2.dev7.dist-info/METADATA,sha256=JiuXUoy2iwM_eZTQi58MNexgjc9xLh13_QIxwGq_SF0,1506
76
+ quasardb-3.14.2.dev7.dist-info/WHEEL,sha256=LwxTQZ0gyDP_uaeNCLm-ZIktY9hv6x0e22Q-hgFd-po,97
77
+ quasardb-3.14.2.dev7.dist-info/top_level.txt,sha256=wlprix4hCywuF1PkgKWYdZeJKq_kgJOqkAvukm_sZQ8,9
78
+ 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: cp312-cp312-win32
5
5
 
@@ -1,54 +0,0 @@
1
- quasardb/INSTALL.vcxproj,sha256=FUilRCaf5c2r4H_n1NWo6QjQum5KnsQbVkOKlZ_IXjc,11123
2
- quasardb/INSTALL.vcxproj.filters,sha256=vyRJK34_t9Jx9ALzR5QY6_Eru6oU4Ozu8BXM9Ad3j4o,561
3
- quasardb/__init__.py,sha256=v8N9gkakw2bRY1Ql3P1yBJRjj0HttNkXPPv1S08Nu3I,4751
4
- quasardb/cmake_install.cmake,sha256=svEWhToWXGZuDWNMoqnU2iLYUfyo9YUJn4jtdzq6O74,1792
5
- quasardb/firehose.py,sha256=thpTQktgzyY9nTk7vnxckSIZcUATgfkPrBheOLvK1SI,3453
6
- quasardb/pool.py,sha256=AQfvBwavnNIqPMprqbUua4NuhVxg4FuRVqpa3Aigk9A,8779
7
- quasardb/qdb_api.dll,sha256=vOnPSxDVE1OJOgciwHxukEG40uezWFAKz5dwHQivHHU,16544768
8
- quasardb/quasardb.cp312-win32.pyd,sha256=y85I55BZdspGaDdBKE-RAr_67goblXVrxS6Hj1qRX4g,1182208
9
- quasardb/stats.py,sha256=WW9wDowjqhokVjg-Yf4wKhMeuOvchZlxUb4PjRVKQTg,7539
10
- quasardb/table_cache.py,sha256=9XdHrWb_zpC9gikyZJhFX1qy5rMUc7o7uEPKfyZHjVY,1567
11
- quasardb/CMakeFiles/generate.stamp,sha256=MC9-mgyGPAS3QAZa3gHSQ8dYfXJy_Hn7AChwEoqVWOs,55
12
- quasardb/CMakeFiles/generate.stamp.depend,sha256=uY8FV-ceJ2Kk-6JfOnsIesDV7jKoUNfkKHNY2Nf7_E8,117
13
- quasardb/date/ALL_BUILD.vcxproj,sha256=7irYmVlC0OfxOA3ClP1t-XCDP0jz1kqkDuZGJ4zKQpg,14300
14
- quasardb/date/ALL_BUILD.vcxproj.filters,sha256=lTQk5MABpmIlZcZqriqmw7SlGUJKSM2xH8HnaKmgC5E,304
15
- quasardb/date/INSTALL.vcxproj,sha256=_ZlDnZ_GfDrHAKR2DA0cZz7-5t5eyMZkSrxNSS04Zto,11148
16
- quasardb/date/INSTALL.vcxproj.filters,sha256=PrBZnivQu3IrWYaILir0ZO7TH4UBY0SCuCZdIN6LwbY,561
17
- quasardb/date/cmake_install.cmake,sha256=zLfJkhFwizj1hZug5WLWJR5pu_bJ0_yWhPPsgrIqRSo,3312
18
- quasardb/date/date.sln,sha256=bNHGcg2vZ2TvSX4RKoKmEdlGnpgGbe-Htqujh0xIdXc,3753
19
- quasardb/date/dateConfigVersion.cmake,sha256=gMHG49AUzfjGGWxNIwxVKqMNUhKftzyhUHHWjn3AXCY,2827
20
- quasardb/date/dateTargets.cmake,sha256=FuGNruC_9fdY0b7YwlC80Kpx9H3Y5CnGXOVNRs6ePRU,2842
21
- quasardb/date/CMakeFiles/generate.stamp,sha256=MC9-mgyGPAS3QAZa3gHSQ8dYfXJy_Hn7AChwEoqVWOs,55
22
- quasardb/date/CMakeFiles/generate.stamp.depend,sha256=WpviBsCIuKQ4ujd_91qeSLR4yTMysEeMOHtL00LmlEA,654
23
- quasardb/date/CMakeFiles/Export/df49adab93b9e0c10c64f72458b31971/dateTargets.cmake,sha256=kI-gSADoA7MuLXEBcyU3_kYGNyGw6NoQ9chjo7LpEHY,4189
24
- quasardb/extensions/__init__.py,sha256=zvMxXV_zuRSbNrkjsu-qFSEiZahdHmC0lhMqMVRzY_8,120
25
- quasardb/extensions/writer.py,sha256=DWpm4qqBGtunIPyNuRLtUWouL_Tmr3_Zs3K5c0JtH04,5758
26
- quasardb/numpy/__init__.py,sha256=YuQ2Srw2Yg5g2ROYYXrBF6ZzBjLWlCmRsc5lzSp3zRo,31543
27
- quasardb/pandas/__init__.py,sha256=5zeAE4uD4uVIWggLaM3NKw5a1NhGtSV2m3eG5EGPwgU,16487
28
- quasardb/pybind11/ALL_BUILD.vcxproj,sha256=WwvzufYnh-bLGfBi0TULer-OkL_vu1csbG6kW2RXMMs,20780
29
- quasardb/pybind11/ALL_BUILD.vcxproj.filters,sha256=WjgQPMVZN7jEaUOdw8Ha03hPfNxybvx_F2wOck10Kqo,308
30
- quasardb/pybind11/INSTALL.vcxproj,sha256=x2NoJT7kQ9Wa7t1Ur1iAaScHLMNqgC-a8NcPqwJjSyA,11168
31
- quasardb/pybind11/INSTALL.vcxproj.filters,sha256=5WE_V9rvNvvs-QCXclC9P1Dcbh0L6DcXzwz-XUH24hY,561
32
- quasardb/pybind11/cmake_install.cmake,sha256=8r81ZB6zHoaWzRpMF8urhB0y9-kJQrc9bIsMZdqK6Ok,1370
33
- quasardb/pybind11/pybind11.sln,sha256=uqKma4yOZL-mmZZ9q9dDieRJObPLVX_NYV_ROhFtt_g,3753
34
- quasardb/pybind11/CMakeFiles/generate.stamp,sha256=MC9-mgyGPAS3QAZa3gHSQ8dYfXJy_Hn7AChwEoqVWOs,55
35
- quasardb/pybind11/CMakeFiles/generate.stamp.depend,sha256=Lq9GQUPLwciLoH-GRxMmkUQfG8SJxupQpZu2lfTPcW4,2279
36
- quasardb/range-v3/ALL_BUILD.vcxproj,sha256=_ORpOqmkgneLInXt507Znb2InwGkU25FkvyZbPHUNok,19308
37
- quasardb/range-v3/ALL_BUILD.vcxproj.filters,sha256=c0k-3qrBreLvjffsj9pJo50YOMqfDYnxLpBqvV1nI00,308
38
- quasardb/range-v3/INSTALL.vcxproj,sha256=8Uvww2OBZ7u78KOpK1l1GjCn7ayr-Q7yt7ssE5lN8kE,11168
39
- quasardb/range-v3/INSTALL.vcxproj.filters,sha256=44Gd8JK4VxYUyw1cfO0W08niOShmVmla-IKFgCNqvgU,561
40
- quasardb/range-v3/Range-v3.sln,sha256=1GYAm1qFb6iOkZr53ppIrE9UTd9en3FeRngd-c41qHc,4615
41
- quasardb/range-v3/cmake_install.cmake,sha256=wYOYhmHINuB7ViFWCDvz9iNXxhx59sQBURoRYrkmEjA,6910
42
- quasardb/range-v3/range-v3-config-version.cmake,sha256=57XQ96x5Ec1VvRfoIPND_DSMJ9ZbHUqa8iZEiS0YMvw,3332
43
- quasardb/range-v3/range-v3-config.cmake,sha256=E7j1hj2ihfV3jYirDWkQgWZ9vjQTPUI9w2BR-qfV6qM,3458
44
- quasardb/range-v3/range.v3.headers.vcxproj,sha256=ojMzBupJ0w1UjVm0YXwBX4Uwzn5Z3UoEzokQKG96RS0,58990
45
- quasardb/range-v3/range.v3.headers.vcxproj.filters,sha256=ncoReu6CX6QMQpsLM7zSZ967VtNJGewQCRAGE4i_wuU,51825
46
- quasardb/range-v3/CMakeFiles/generate.stamp,sha256=MC9-mgyGPAS3QAZa3gHSQ8dYfXJy_Hn7AChwEoqVWOs,55
47
- quasardb/range-v3/CMakeFiles/generate.stamp.depend,sha256=0DvY-iRPmet9YKGVDBPuxg7_yuVOUeZ3E8GD7459vsM,1909
48
- quasardb/range-v3/CMakeFiles/Export/d94ef200eca10a819b5858b33e808f5b/range-v3-targets.cmake,sha256=2WN8TJ25ES8AniYWyiS3BFiUz4RAJww7dvvnC-kE7zM,5393
49
- quasardb/range-v3/include/range/v3/version.hpp,sha256=jy6iEzXjaavicAw1VSIfvpS7Wu9IoEY51Q5N9m4eaB8,610
50
- quasardb-3.14.2.dev5.dist-info/LICENSE.md,sha256=0iT1ltzDof6cJr8mSX2PVOGhKjISfCrOYzJg7rG2pOs,1477
51
- quasardb-3.14.2.dev5.dist-info/METADATA,sha256=W9MjerFMjq2V9Rg3mK6-uqDXKRr6VqO3WSd3Hee341A,1483
52
- quasardb-3.14.2.dev5.dist-info/WHEEL,sha256=kSb2J6Von4lLLVW8fdgHRm80iNil-_AEqojXon4CRKY,97
53
- quasardb-3.14.2.dev5.dist-info/top_level.txt,sha256=wlprix4hCywuF1PkgKWYdZeJKq_kgJOqkAvukm_sZQ8,9
54
- quasardb-3.14.2.dev5.dist-info/RECORD,,