pyspiral 0.7.0__cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl → 0.7.1__cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.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 pyspiral might be problematic. Click here for more details.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyspiral
3
- Version: 0.7.0
3
+ Version: 0.7.1
4
4
  Classifier: Intended Audience :: Science/Research
5
5
  Classifier: Operating System :: OS Independent
6
6
  Classifier: Programming Language :: Python
@@ -1,8 +1,8 @@
1
- pyspiral-0.7.0.dist-info/METADATA,sha256=zP3jypGjswSz8nqMxMj8N6a4udG_LoZZLQAf8Xepg64,1874
2
- pyspiral-0.7.0.dist-info/WHEEL,sha256=0ecHyBdkJfSXYIVmWsPh7S-4h4fSrB4FlXhlnIu9c_A,130
3
- pyspiral-0.7.0.dist-info/entry_points.txt,sha256=R96Y3FpYX6XbQu9qMPfUTgiCcf4qM9OBQQZTDdBkZwA,74
1
+ pyspiral-0.7.1.dist-info/METADATA,sha256=WQ0LCz8jtz9qHpU6Zim1I_134EwD3Ve8V4bW0nU_t-0,1874
2
+ pyspiral-0.7.1.dist-info/WHEEL,sha256=0ecHyBdkJfSXYIVmWsPh7S-4h4fSrB4FlXhlnIu9c_A,130
3
+ pyspiral-0.7.1.dist-info/entry_points.txt,sha256=R96Y3FpYX6XbQu9qMPfUTgiCcf4qM9OBQQZTDdBkZwA,74
4
4
  spiral/__init__.py,sha256=gAysTwG_oEeKVMdCOfOzDhl0bM2miiK8Ds2vvUihBWw,1153
5
- spiral/_lib.abi3.so,sha256=KpAABrxo0SoxijSFaBc23InS5rNj8N7EY3VYusKcRD4,61322472
5
+ spiral/_lib.abi3.so,sha256=qHomtLByZBxCo6ltUQ6hNpqtOWGU1d1RuWaybUtnFDM,61318472
6
6
  spiral/adbc.py,sha256=7IxfWIeQN-fh0W5OdN_PP2x3pzQYg6ZUOLsHg3jktqw,14842
7
7
  spiral/api/__init__.py,sha256=ULBlVq3PnfNOO6T5naE_ULmmii-83--qTuN2PpAUQN0,2241
8
8
  spiral/api/admin.py,sha256=A1iVR1XYJSObZivPAD5UzmPuMgupXc9kaHNYYa_kwfs,585
@@ -35,7 +35,7 @@ spiral/cli/telemetry.py,sha256=Uxo1Q1FkKJ6n6QNGOUmL3j_pRRWRx0qWIhoP-U9BuR0,589
35
35
  spiral/cli/text.py,sha256=DlWGe4JrkdERAiqyITNpk91Wqb63Re99rNYlIFsIamc,4031
36
36
  spiral/cli/types.py,sha256=XYzo1GgX7dBBItoBSrHI4vO5C2lLmS2sktb-2GnGH3E,1362
37
37
  spiral/cli/workloads.py,sha256=2_SLfQTFN6y73R9H0i9dk8VIOVagKxSxOpHXC56yptY,2015
38
- spiral/client.py,sha256=zMp-xXGL4R1Py_rYrC5o3jFLam1oA74azi50dvMP-_o,6329
38
+ spiral/client.py,sha256=53dVv8wxYMmozUfR8MVcUufKGqdVIdb0yZ0gchczBoQ,6426
39
39
  spiral/core/__init__.pyi,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
40
  spiral/core/_tools/__init__.pyi,sha256=b2KLfTOQ67pjfbYt07o0IGiTu5o2bZw69lllV8v0Dps,143
41
41
  spiral/core/authn/__init__.pyi,sha256=z_GWyIS62fuiYQrYO8hzw4W8oGaiciqS1u5qtAt54VY,769
@@ -60,7 +60,7 @@ spiral/debug/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
60
  spiral/debug/manifests.py,sha256=7f1O3ba9mrA5nXpOF9cEIQuUAteP5wiBkFy_diQJ7No,3216
61
61
  spiral/debug/metrics.py,sha256=XdRDcjggtsLNGCAjam6IxG9072pz_d2C8iLApNRFUtk,2044
62
62
  spiral/debug/scan.py,sha256=UEm_aRnql5pwDPTpZgakMLNjlzkKL4RurBFFqH_BLAQ,9526
63
- spiral/enrichment.py,sha256=aXkKgV24w_0XmhTel_SOshJ2xCgkmXsFGZvaE7yXQ8k,6075
63
+ spiral/enrichment.py,sha256=4j5W68YEJOABw5CXrt0A5gMILdR8KaXPjeMLlAQ4Gi4,6072
64
64
  spiral/expressions/__init__.py,sha256=vMNFeeozkWph3dBpEkHPThUhZdT9ZZzxHe71HnkWlDU,8020
65
65
  spiral/expressions/base.py,sha256=PvhJkcUSsPSIaxirHVzM9zlqyBXiaiia1HXohXdOmL4,5377
66
66
  spiral/expressions/file.py,sha256=HRzGjc3goIlUlKjysoirexDaflNdnj9OoZ6j2uTKZnA,388
@@ -102,8 +102,8 @@ spiral/streaming_/__init__.py,sha256=s7MlW2ERsuZmZGExLFL6RcZon2e0tNBocBg5ANgki7k
102
102
  spiral/streaming_/reader.py,sha256=tl_lC9xgh1-QFhsZn4xQT7It3PVTzHCEUT2BG2dWBRQ,4166
103
103
  spiral/streaming_/stream.py,sha256=DM1hBDHnWm1ZFKZ-hZ4zxeSXITcUI6kWzwdJZvywI8o,5915
104
104
  spiral/substrait_.py,sha256=AKeOD4KIXvz2J4TYxnIneOiHddtBIyOhuNxVO_uH0eg,12592
105
- spiral/table.py,sha256=prjDBcm6Qerdq3ypXzfbXb7ngAcO0j-Z9aTeZvzKoqs,12209
105
+ spiral/table.py,sha256=ep8ZYtl6POebkPViR2FrekhFazNmAbOAESoLUODlup8,12242
106
106
  spiral/text_index.py,sha256=FQ9rgIEGLSJryS9lFdMhKtPFey18BXoWbPXyvZPJJ04,442
107
107
  spiral/transaction.py,sha256=KQhx3DvQyxG2C8md-YGsF_PgBRfayI0r_7ebMItDHdI,3938
108
108
  spiral/types_.py,sha256=W_jyO7F6rpPiH69jhgSgV7OxQZbOlb1Ho3InpKUP6Eo,155
109
- pyspiral-0.7.0.dist-info/RECORD,,
109
+ pyspiral-0.7.1.dist-info/RECORD,,
spiral/_lib.abi3.so CHANGED
Binary file
spiral/client.py CHANGED
@@ -116,6 +116,8 @@ class Spiral:
116
116
  asof = timestamp_micros(asof)
117
117
 
118
118
  # Combine all projections into a single struct.
119
+ if not projections:
120
+ raise ValueError("At least one projection is required.")
119
121
  projection = se.merge(*projections)
120
122
  if where is not None:
121
123
  where = se.lift(where)
spiral/enrichment.py CHANGED
@@ -8,7 +8,7 @@ from spiral.core.table.spec import Operation
8
8
  from spiral.expressions import Expr
9
9
 
10
10
  if TYPE_CHECKING:
11
- from spiral import KeySpaceIndex, Table
11
+ from spiral import KeySpaceIndex, Scan, Table
12
12
 
13
13
  logger = logging.getLogger(__name__)
14
14
 
@@ -47,16 +47,17 @@ class Enrichment:
47
47
  """The filter expression."""
48
48
  return self._where
49
49
 
50
+ def _scan(self) -> "Scan":
51
+ return self._table.spiral.scan(self._projection, where=self._where)
52
+
50
53
  def apply(self, *, batch_readahead: int | None = None, partition_size_bytes: int | None = None) -> None:
51
54
  """Apply the enrichment onto the table in a streaming fashion.
52
55
 
53
56
  For large tables, consider using `apply_dask` for distributed execution.
54
57
  """
55
- scan = self._table.spiral.scan(self._projection, where=self._where)
56
-
57
58
  with self._table.txn() as txn:
58
59
  txn.writeback(
59
- scan,
60
+ self._scan(),
60
61
  partition_size_bytes=partition_size_bytes,
61
62
  batch_readahead=batch_readahead,
62
63
  )
@@ -99,7 +100,7 @@ class Enrichment:
99
100
 
100
101
  # Start a transaction BEFORE the planning scan.
101
102
  tx = self._table.txn()
102
- plan_scan = self._table.spiral.scan(self._projection, where=self._where)
103
+ plan_scan = self._scan()
103
104
 
104
105
  # Determine the "tasks". Use the index if provided.
105
106
  shards = plan_scan.shards()
spiral/table.py CHANGED
@@ -134,9 +134,9 @@ class Table(Expr):
134
134
  """
135
135
  from spiral import expressions as se
136
136
 
137
- # Combine table with all projections into a single struct.
138
- # The table is included to ensure key columns are present in the scan output.
139
- projection = se.merge(self, *projections)
137
+ # TODO(marko): This shouldn't need to happen. We should be able to read keys from writeback scan.
138
+ # Include key columns in the projection.
139
+ projection = se.merge(self.select(*self.key_schema.names), *projections)
140
140
  if where is not None:
141
141
  where = se.lift(where)
142
142