xoscar 0.3.2__cp39-cp39-win_amd64.whl → 0.3.3__cp39-cp39-win_amd64.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 xoscar might be problematic. Click here for more details.

Binary file
@@ -30,7 +30,7 @@ from urllib.parse import urlparse
30
30
  from ..._utils import to_binary
31
31
  from ...constants import XOSCAR_UNIX_SOCKET_DIR
32
32
  from ...serialization import AioDeserializer, AioSerializer, deserialize
33
- from ...utils import classproperty, implements
33
+ from ...utils import classproperty, implements, is_v6_ip
34
34
  from .base import Channel, ChannelType, Client, Server
35
35
  from .core import register_client, register_server
36
36
  from .utils import read_buffers, write_buffers
@@ -201,17 +201,37 @@ class SocketServer(_BaseSocketServer):
201
201
  def channel_type(self) -> int:
202
202
  return ChannelType.remote
203
203
 
204
+ @classmethod
205
+ def parse_config(cls, config: dict) -> dict:
206
+ if config is None or not config:
207
+ return dict()
208
+ # we only need the following config
209
+ keys = ["listen_elastic_ip"]
210
+ parsed_config = {key: config[key] for key in keys if key in config}
211
+
212
+ return parsed_config
213
+
204
214
  @staticmethod
205
215
  @implements(Server.create)
206
216
  async def create(config: Dict) -> "Server":
207
217
  config = config.copy()
208
218
  if "address" in config:
209
219
  address = config.pop("address")
210
- host, port = address.split(":", 1)
220
+ host, port = address.rsplit(":", 1)
211
221
  port = int(port)
212
222
  else:
213
223
  host = config.pop("host")
214
224
  port = int(config.pop("port"))
225
+ _host = host
226
+ if config.pop("listen_elastic_ip", False):
227
+ # The Actor.address will be announce to client, and is not on our host,
228
+ # cannot actually listen on it,
229
+ # so we have to keep SocketServer.host untouched to make sure Actor.address not changed
230
+ if is_v6_ip(host):
231
+ _host = "::"
232
+ else:
233
+ _host = "0.0.0.0"
234
+
215
235
  handle_channel = config.pop("handle_channel")
216
236
  if "start_serving" not in config:
217
237
  config["start_serving"] = False
@@ -224,7 +244,7 @@ class SocketServer(_BaseSocketServer):
224
244
 
225
245
  port = port if port != 0 else None
226
246
  aio_server = await asyncio.start_server(
227
- handle_connection, host=host, port=port, **config
247
+ handle_connection, host=_host, port=port, **config
228
248
  )
229
249
 
230
250
  # get port of the socket if not specified
@@ -250,7 +270,7 @@ class SocketClient(Client):
250
270
  async def connect(
251
271
  dest_address: str, local_address: str | None = None, **kwargs
252
272
  ) -> "Client":
253
- host, port_str = dest_address.split(":", 1)
273
+ host, port_str = dest_address.rsplit(":", 1)
254
274
  port = int(port_str)
255
275
  (reader, writer) = await asyncio.open_connection(host=host, port=port, **kwargs)
256
276
  channel = SocketChannel(
@@ -28,7 +28,7 @@ import numpy as np
28
28
  from ...nvutils import get_cuda_context, get_index_and_uuid
29
29
  from ...serialization import deserialize
30
30
  from ...serialization.aio import BUFFER_SIZES_NAME, AioSerializer, get_header_length
31
- from ...utils import classproperty, implements, is_cuda_buffer, lazy_import
31
+ from ...utils import classproperty, implements, is_cuda_buffer, is_v6_ip, lazy_import
32
32
  from ..message import _MessageBase
33
33
  from .base import Channel, ChannelType, Client, Server
34
34
  from .core import register_client, register_server
@@ -401,11 +401,21 @@ class UCXServer(Server):
401
401
  prefix = f"{UCXServer.scheme}://"
402
402
  if address.startswith(prefix):
403
403
  address = address[len(prefix) :]
404
- host, port = address.split(":", 1)
404
+ host, port = address.rsplit(":", 1)
405
405
  port = int(port)
406
406
  else:
407
407
  host = config.pop("host")
408
408
  port = int(config.pop("port"))
409
+ _host = host
410
+ if config.pop("listen_elastic_ip", False):
411
+ # The Actor.address will be announce to client, and is not on our host,
412
+ # cannot actually listen on it,
413
+ # so we have to keep SocketServer.host untouched to make sure Actor.address not changed
414
+ if is_v6_ip(host):
415
+ _host = "::"
416
+ else:
417
+ _host = "0.0.0.0"
418
+
409
419
  handle_channel = config.pop("handle_channel")
410
420
 
411
421
  # init
@@ -414,7 +424,7 @@ class UCXServer(Server):
414
424
  async def serve_forever(client_ucp_endpoint: "ucp.Endpoint"): # type: ignore
415
425
  try:
416
426
  await server.on_connected(
417
- client_ucp_endpoint, local_address=server.address
427
+ client_ucp_endpoint, local_address="%s:%d" % (_host, port)
418
428
  )
419
429
  except ChannelClosed: # pragma: no cover
420
430
  logger.exception("Connection closed before handshake completed")
@@ -498,7 +508,7 @@ class UCXClient(Client):
498
508
  prefix = f"{UCXClient.scheme}://"
499
509
  if dest_address.startswith(prefix):
500
510
  dest_address = dest_address[len(prefix) :]
501
- host, port_str = dest_address.split(":", 1)
511
+ host, port_str = dest_address.rsplit(":", 1)
502
512
  port = int(port_str)
503
513
  kwargs = kwargs.copy()
504
514
  ucx_config = kwargs.pop("config", dict()).get("ucx", dict())
@@ -132,7 +132,7 @@ class MainActorPool(MainActorPoolBase):
132
132
  """Get external address for every process"""
133
133
  assert n_process is not None
134
134
  if ":" in address:
135
- host, port_str = address.split(":", 1)
135
+ host, port_str = address.rsplit(":", 1)
136
136
  port = int(port_str)
137
137
  if ports:
138
138
  if len(ports) != n_process:
@@ -324,6 +324,7 @@ class MainActorPool(MainActorPoolBase):
324
324
  start_method: str | None = None,
325
325
  kwargs: dict | None = None,
326
326
  ):
327
+ # external_address has port 0, subprocess will bind random port.
327
328
  external_address = (
328
329
  external_address
329
330
  or MainActorPool.get_external_addresses(self.external_address, n_process=1)[
@@ -393,7 +394,7 @@ class MainActorPool(MainActorPoolBase):
393
394
  content=self._config,
394
395
  )
395
396
  await self.handle_control_command(control_message)
396
-
397
+ # The actual port will return in process_status.
397
398
  return process_status.external_addresses[0]
398
399
 
399
400
  async def remove_sub_pool(
@@ -416,22 +417,21 @@ class MainActorPool(MainActorPoolBase):
416
417
  async def kill_sub_pool(
417
418
  self, process: multiprocessing.Process, force: bool = False
418
419
  ):
419
- if (
420
- "COV_CORE_SOURCE" in os.environ and not force and not _is_windows
421
- ): # pragma: no cover
422
- # must shutdown gracefully, or coverage info lost
423
- try:
424
- os.kill(process.pid, signal.SIGINT) # type: ignore
425
- except OSError: # pragma: no cover
426
- pass
427
- process.terminate()
420
+ if not force: # pragma: no cover
421
+ # must shutdown gracefully, or subprocess created by model will not exit
422
+ if not _is_windows:
423
+ try:
424
+ os.kill(process.pid, signal.SIGINT) # type: ignore
425
+ except OSError: # pragma: no cover
426
+ pass
427
+ process.terminate() # SIGTERM
428
428
  wait_pool = futures.ThreadPoolExecutor(1)
429
429
  try:
430
430
  loop = asyncio.get_running_loop()
431
431
  await loop.run_in_executor(wait_pool, process.join, 3)
432
432
  finally:
433
433
  wait_pool.shutdown(False)
434
- process.kill()
434
+ process.kill() # SIGKILL
435
435
  await asyncio.to_thread(process.join, 5)
436
436
 
437
437
  async def is_sub_pool_alive(self, process: multiprocessing.Process):
Binary file
xoscar/collective/core.py CHANGED
@@ -95,7 +95,7 @@ class RankActor(Actor):
95
95
  return self._backend
96
96
 
97
97
  def _get_ip(self) -> str:
98
- return self.address.split(":")[0]
98
+ return self.address.rsplit(":", 1)[0]
99
99
 
100
100
  def _process_group_name(self, ranks: List[int]) -> str:
101
101
  return hashlib.sha1(
xoscar/collective/uv.dll CHANGED
Binary file
Binary file
Binary file
xoscar/utils.py CHANGED
@@ -465,12 +465,12 @@ def is_linux():
465
465
 
466
466
 
467
467
  def is_v4_zero_ip(ip_port_addr: str) -> bool:
468
- return ip_port_addr.startswith("0.0.0.0:")
468
+ return ip_port_addr.split("://")[-1].startswith("0.0.0.0:")
469
469
 
470
470
 
471
471
  def is_v6_zero_ip(ip_port_addr: str) -> bool:
472
472
  # tcp6 addr ":::123", ":: means all zero"
473
- arr = ip_port_addr.split(":")
473
+ arr = ip_port_addr.split("://")[-1].split(":")
474
474
  if len(arr) <= 2: # Not tcp6 or udp6
475
475
  return False
476
476
  for part in arr[0:-1]:
@@ -480,6 +480,11 @@ def is_v6_zero_ip(ip_port_addr: str) -> bool:
480
480
  return True
481
481
 
482
482
 
483
+ def is_v6_ip(ip_port_addr: str) -> bool:
484
+ arr = ip_port_addr.split("://", 1)[-1].split(":")
485
+ return len(arr) > 1
486
+
487
+
483
488
  def fix_all_zero_ip(remote_addr: str, connect_addr: str) -> str:
484
489
  """
485
490
  Use connect_addr to fix ActorRef.address return by remote server.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xoscar
3
- Version: 0.3.2
3
+ Version: 0.3.3
4
4
  Summary: Python actor framework for heterogeneous computing.
5
5
  Home-page: http://github.com/xorbitsai/xoscar
6
6
  Author: Qin Xuye
@@ -18,41 +18,41 @@ Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: Implementation :: CPython
19
19
  Classifier: Topic :: Software Development :: Libraries
20
20
  Description-Content-Type: text/markdown
21
- Requires-Dist: numpy <2.0.0,>=1.14.0
22
- Requires-Dist: pandas >=1.0.0
23
- Requires-Dist: cloudpickle >=1.5.0
24
- Requires-Dist: psutil >=5.9.0
25
- Requires-Dist: tblib >=1.7.0
21
+ Requires-Dist: numpy<2.0.0,>=1.14.0
22
+ Requires-Dist: pandas>=1.0.0
23
+ Requires-Dist: cloudpickle>=1.5.0
24
+ Requires-Dist: psutil>=5.9.0
25
+ Requires-Dist: tblib>=1.7.0
26
26
  Requires-Dist: packaging
27
- Requires-Dist: pickle5 ; python_version < "3.8"
28
- Requires-Dist: uvloop >=0.14.0 ; sys_platform != "win32"
29
- Requires-Dist: scipy >=1.0.0 ; sys_platform != "win32" or python_version >= "3.10"
30
- Requires-Dist: scipy <=1.9.1,>=1.0.0 ; sys_platform == "win32" and python_version < "3.10"
27
+ Requires-Dist: pickle5; python_version < "3.8"
28
+ Requires-Dist: uvloop>=0.14.0; sys_platform != "win32"
29
+ Requires-Dist: scipy>=1.0.0; sys_platform != "win32" or python_version >= "3.10"
30
+ Requires-Dist: scipy<=1.9.1,>=1.0.0; sys_platform == "win32" and python_version < "3.10"
31
31
  Provides-Extra: dev
32
- Requires-Dist: cython >=0.29 ; extra == 'dev'
33
- Requires-Dist: pytest >=3.5.0 ; extra == 'dev'
34
- Requires-Dist: pytest-cov >=2.5.0 ; extra == 'dev'
35
- Requires-Dist: pytest-timeout >=1.2.0 ; extra == 'dev'
36
- Requires-Dist: pytest-forked >=1.0 ; extra == 'dev'
37
- Requires-Dist: pytest-asyncio >=0.14.0 ; extra == 'dev'
38
- Requires-Dist: ipython >=6.5.0 ; extra == 'dev'
39
- Requires-Dist: sphinx <5.0.0,>=3.0.0 ; extra == 'dev'
40
- Requires-Dist: pydata-sphinx-theme >=0.3.0 ; extra == 'dev'
41
- Requires-Dist: sphinx-intl >=0.9.9 ; extra == 'dev'
42
- Requires-Dist: flake8 >=3.8.0 ; extra == 'dev'
43
- Requires-Dist: black ; extra == 'dev'
44
- Requires-Dist: mock >=4.0.0 ; (python_version < "3.8") and extra == 'dev'
32
+ Requires-Dist: cython>=0.29; extra == "dev"
33
+ Requires-Dist: pytest>=3.5.0; extra == "dev"
34
+ Requires-Dist: pytest-cov>=2.5.0; extra == "dev"
35
+ Requires-Dist: pytest-timeout>=1.2.0; extra == "dev"
36
+ Requires-Dist: pytest-forked>=1.0; extra == "dev"
37
+ Requires-Dist: pytest-asyncio>=0.14.0; extra == "dev"
38
+ Requires-Dist: ipython>=6.5.0; extra == "dev"
39
+ Requires-Dist: sphinx<5.0.0,>=3.0.0; extra == "dev"
40
+ Requires-Dist: pydata-sphinx-theme>=0.3.0; extra == "dev"
41
+ Requires-Dist: sphinx-intl>=0.9.9; extra == "dev"
42
+ Requires-Dist: flake8>=3.8.0; extra == "dev"
43
+ Requires-Dist: black; extra == "dev"
44
+ Requires-Dist: mock>=4.0.0; python_version < "3.8" and extra == "dev"
45
45
  Provides-Extra: doc
46
- Requires-Dist: ipython >=6.5.0 ; extra == 'doc'
47
- Requires-Dist: sphinx <5.0.0,>=3.0.0 ; extra == 'doc'
48
- Requires-Dist: pydata-sphinx-theme >=0.3.0 ; extra == 'doc'
49
- Requires-Dist: sphinx-intl >=0.9.9 ; extra == 'doc'
46
+ Requires-Dist: ipython>=6.5.0; extra == "doc"
47
+ Requires-Dist: sphinx<5.0.0,>=3.0.0; extra == "doc"
48
+ Requires-Dist: pydata-sphinx-theme>=0.3.0; extra == "doc"
49
+ Requires-Dist: sphinx-intl>=0.9.9; extra == "doc"
50
50
  Provides-Extra: extra
51
- Requires-Dist: pyarrow >=5.0.0 ; extra == 'extra'
51
+ Requires-Dist: pyarrow>=5.0.0; extra == "extra"
52
52
  Provides-Extra: kubernetes
53
- Requires-Dist: kubernetes >=10.0.0 ; extra == 'kubernetes'
53
+ Requires-Dist: kubernetes>=10.0.0; extra == "kubernetes"
54
54
  Provides-Extra: ray
55
- Requires-Dist: xoscar-ray >=0.0.1 ; extra == 'ray'
55
+ Requires-Dist: xoscar-ray>=0.0.1; extra == "ray"
56
56
 
57
57
  <div align="center">
58
58
  <img width="77%" alt="" src="https://raw.githubusercontent.com/xprobe-inc/xoscar/main/doc/source/_static/Xoscar.svg"><br>
@@ -1,5 +1,5 @@
1
1
  xoscar/__init__.py,sha256=dlwtB7dnDp5WME6CZVQY7d9lk1yJ9s___H5UxjGlAd4,1668
2
- xoscar/_utils.cp39-win_amd64.pyd,sha256=FyCl77gq4xdkD1yl6dW3RXfHmNIff3HYSQbMKcm6T34,117760
2
+ xoscar/_utils.cp39-win_amd64.pyd,sha256=6z3L2l_G8tH79Ld2GgO4tB0sCwr_c8ojNM9zcWaT56o,117760
3
3
  xoscar/_utils.pxd,sha256=rlNbTg5lhXA-jCOLksqF4jhUlNn0xw2jx1HxdLa34pc,1193
4
4
  xoscar/_utils.pyx,sha256=5Wvind3AQ3JaMK7Zv9SjhiPO6LEol2hW7_fMncn69go,7300
5
5
  xoscar/_version.py,sha256=bsfCVAo_o9LkiP3AjPsP4SRRqhjuS0t4D1WGJPzbdls,24412
@@ -7,10 +7,10 @@ xoscar/api.py,sha256=B5oXv4vgMxMteh1YNaBmNFDrUFmYa_dCdzfaWwwZnCo,13820
7
7
  xoscar/backend.py,sha256=8G5JwjoOT6Q2slb11eXNApxgcmvNQUCdQzkoIMDwLcQ,1917
8
8
  xoscar/batch.py,sha256=Jk5BSpvMFAV9DrRy0a9tgPvIo_dt8cbJReZBL0cnOPc,8128
9
9
  xoscar/constants.py,sha256=H9ntCahBz5nKO-A6rkrGKy4WB2kNaLZAytkDajKIXqM,780
10
- xoscar/context.cp39-win_amd64.pyd,sha256=2s3rzV0nRQ2v-M36EfOsNY1qemNcEnglY42lw4t2MPA,159232
10
+ xoscar/context.cp39-win_amd64.pyd,sha256=sjAajUmfygSW0n093Do3ADroZYicC9zUlBrQ5bndwKo,159232
11
11
  xoscar/context.pxd,sha256=6n6IAbmArSRq8EjcsbS6npW8xP1jI0qOoS1fF0oyj-o,746
12
12
  xoscar/context.pyx,sha256=FOJVerGOvxe2USryXEQA0rpaFX_ScxISH6QWKUcahY8,11310
13
- xoscar/core.cp39-win_amd64.pyd,sha256=ocwDJE6kz4q_bjwN36A2A5eFALzIgufGaBrd-KE5CXY,335360
13
+ xoscar/core.cp39-win_amd64.pyd,sha256=mtplyKaelt9l5JcCDUPP17LJbJV98YGFDnRfXCLCZxg,334848
14
14
  xoscar/core.pxd,sha256=dGv62H92PFG98SVILuF641kY-NWFEt1FYqqOX3WY5RQ,1330
15
15
  xoscar/core.pyx,sha256=0YvJW2AHgymyfsAlPGvIFw65J5gTKO3PK2p1wl4VlJ0,22388
16
16
  xoscar/debug.py,sha256=hrmxIH6zvTKasQo6PUUgXu5mgEsR0g87Fvpw7CoHipg,5257
@@ -19,7 +19,7 @@ xoscar/errors.py,sha256=hfIAlYuSVfB3dAQYr8hTLAMmfy5en6Y8mihdtw1gTEE,1304
19
19
  xoscar/libcpp.pxd,sha256=XGy887HXdRsvF47s-A7PvHX6Gaf15d_azRscWJY0Hc8,1178
20
20
  xoscar/nvutils.py,sha256=z6RCVs0sgKFm55TTgAYG3qy5f_AKJzjcH2kcRB-wTJQ,21129
21
21
  xoscar/profiling.py,sha256=LUqkj6sSxaFj0ltS7Yk2kFsh5ieHY417xypTYHwQOb4,8275
22
- xoscar/utils.py,sha256=ENwjm_ImxD3fA-3FP4qERYv7XuDnB0xvySDjM2LHQug,16578
22
+ xoscar/utils.py,sha256=CFiSrCpvbTKVXOZs18AQ3zZytDePo5cv8ra3n_0vCeY,16738
23
23
  xoscar/aio/__init__.py,sha256=pkMRxXvvUy_aedqw53aIi6ZS0kb7SCoNLjN9HXUQKIk,834
24
24
  xoscar/aio/_threads.py,sha256=-cfEFZUzx5j_3d7M0ub2FQaVZ8MrOG2UVo5ugucEmMY,1348
25
25
  xoscar/aio/base.py,sha256=ytknTCjTjNQbTM7l7QGXqPYYUkD7qq-zVBGVZ34L1Tc,2335
@@ -31,7 +31,7 @@ xoscar/backends/allocate_strategy.py,sha256=DzvTlixwzTANURI2mDLHm3vcaugSPDxU6UQZ
31
31
  xoscar/backends/config.py,sha256=7nmvU_19zYR7n-bT8BNasbjntwmobmMiM7wN7O6Lujc,5129
32
32
  xoscar/backends/context.py,sha256=NukXzBwq9ZwuiN1y6RE1hfNGsW589hDtJAVwu-DV9E0,15874
33
33
  xoscar/backends/core.py,sha256=bVQxM1E4qMq1-SkfrZM1aolNg1WQv2sHcZxWI1ETyMM,7625
34
- xoscar/backends/message.cp39-win_amd64.pyd,sha256=A2jKmHb8NkOnGVr7aqNqmoCiyerMLoKL1ID6V_y0lII,265728
34
+ xoscar/backends/message.cp39-win_amd64.pyd,sha256=_Apf-2QxBwuVO5yyyvbdrvg7_jQ0Oa0fYclV9H-yw44,265728
35
35
  xoscar/backends/message.pyx,sha256=kD_bqaApizHtMzqH0Baw5GH3N7r26NwOGoVfm7KCXWg,18203
36
36
  xoscar/backends/pool.py,sha256=_PtJn9AHYLwmEqk1FYaNO4_3mQo_AK79UsRS5P3a_RE,60742
37
37
  xoscar/backends/router.py,sha256=GJpSV_LhzINHdTp5jtsMHfPNMkNb1KI-WlqGqhwApGU,7953
@@ -40,23 +40,23 @@ xoscar/backends/communication/base.py,sha256=wmWTeE4lcB_ohqyJJ6MdzMGcrOqy2RSKRp8
40
40
  xoscar/backends/communication/core.py,sha256=ZM_fU0yokoPzXcJ6j-89llp2r7J9pl3gE5iImn4b4bE,2199
41
41
  xoscar/backends/communication/dummy.py,sha256=apbkfFdVWqeqc8Cc1LInOw6ikVoFWixTwBN__djxgBY,8040
42
42
  xoscar/backends/communication/errors.py,sha256=-O6ZaKs6Gz7g_ZnKU2wrz8D9btowqaYuQ9u0zCYSLWo,743
43
- xoscar/backends/communication/socket.py,sha256=jTdU_BUD3x2s0GpJBsI_52WZubBBprzp-X0RC6bzixQ,12194
44
- xoscar/backends/communication/ucx.py,sha256=lo_E3M9z7prFsZV2HvuyLwKATKHVQSIKzhXXZlL4NQs,19787
43
+ xoscar/backends/communication/socket.py,sha256=gqLYXP7vvmUHabVR_iaVTMpNFPxfRagRy1yYg1CnfXI,12961
44
+ xoscar/backends/communication/ucx.py,sha256=Kz7L7zo-ZJL0qqtt5hiuTtyAOUiws-72hWRNwq8mMRI,20231
45
45
  xoscar/backends/communication/utils.py,sha256=F-muF5_ow9JzAPAZ3d8XaGDiz3bRZOdWmWBDwQOVLe0,3761
46
46
  xoscar/backends/indigen/__init__.py,sha256=Khr2aGbaIw_04NIdY7QNhdljCKbmmzLb4NeAOM3LF8M,701
47
47
  xoscar/backends/indigen/backend.py,sha256=cCMkZDEKuRQlFb6v79JvWi5lfzsvAafznOeEWlw7CWY,1663
48
48
  xoscar/backends/indigen/driver.py,sha256=uLPBAxG7q8ds6yc-baeYUWu_m4K1gST3_BPqkfnlarw,978
49
- xoscar/backends/indigen/pool.py,sha256=sFspDW6gbcd7f7MGBaU1LwmNr48RK39XZUg0Q8oJ5us,17178
49
+ xoscar/backends/indigen/pool.py,sha256=8pk-FSO007Al2Qb6Ndqc8cMtG-F40tgoaDt095GGfYM,17321
50
50
  xoscar/backends/test/__init__.py,sha256=xgE4hbD3g46G1GDJEeozaXIk57XaahmFMNQsnRzRcrs,698
51
51
  xoscar/backends/test/backend.py,sha256=Q4C6TFQzZogjugGmPh3QZw4IigL8VGCFOJ5fKkE1Uvk,1301
52
52
  xoscar/backends/test/pool.py,sha256=Eg_P--ErTwd2EowpZZg9BMhAG9UBOfXEHVhEId3OqPw,7465
53
53
  xoscar/collective/__init__.py,sha256=3tTgFXALDbAwmEDtmBX7PN7N6ZrcPFC4evMXMIhBtsg,801
54
54
  xoscar/collective/common.py,sha256=9c7xq3IOUvfA0I9GnpalUqXZOzmF6IEILv4zL64BYVE,3663
55
- xoscar/collective/core.py,sha256=Rx1niJ_6rznLG9varP53oqTH_bZabRzgbuP2V6JPu54,24235
55
+ xoscar/collective/core.py,sha256=191aPxbUgWpjzrqyozndImDAQhZFmqoQdBkHFLDfXN0,24239
56
56
  xoscar/collective/process_group.py,sha256=kTPbrLMJSGhqbiWvTIiz-X3W0rZWd_CFn_zUIlXbOlM,23286
57
57
  xoscar/collective/utils.py,sha256=p3WEVtXvnVhkuO5mRgQBhBRFr1dKHcDKMjrbMyuiyfg,1219
58
- xoscar/collective/uv.dll,sha256=VnPrAlCzpnK9WWhZ9_cbhsjHWwW9l-d9-f73qwJV0Uw,620544
59
- xoscar/collective/xoscar_pygloo.cp39-win_amd64.pyd,sha256=HkJf5ZrjlXEOGKm1R-Tv2lNSaB60StnHbJsPDNj-bV4,799232
58
+ xoscar/collective/uv.dll,sha256=aukSRFUce3OCGu0bkvJS6K3U8Md5Mylib5Hfqsc-1uM,620544
59
+ xoscar/collective/xoscar_pygloo.cp39-win_amd64.pyd,sha256=zzt6he9kNBuRTNvhEYhb97uWabSrbdi7nPKUFFvGtHA,799232
60
60
  xoscar/metrics/__init__.py,sha256=RjXuuYw4I2YYgD8UY2Z5yCZk0Z56xMJ1n40O80Dtxf8,726
61
61
  xoscar/metrics/api.py,sha256=dtJ4QrIqQNXhJedeqOPs4TXKgrRGZFFN50xAd9SCfec,9144
62
62
  xoscar/metrics/backends/__init__.py,sha256=ZHepfhCDRuK9yz4pAM7bjpWDvS3Ijp1YgyynoUFLeuU,594
@@ -67,7 +67,7 @@ xoscar/metrics/backends/prometheus/__init__.py,sha256=ZHepfhCDRuK9yz4pAM7bjpWDvS
67
67
  xoscar/metrics/backends/prometheus/prometheus_metric.py,sha256=65hb8O3tmsEJ7jgOrIwl_suj9SE5Tmqcfjuk0urkLvE,2120
68
68
  xoscar/serialization/__init__.py,sha256=NOAn046vnHEkx--82BKNinV8EpyOfT5hqfRBGnKl56s,866
69
69
  xoscar/serialization/aio.py,sha256=bL31B2lwrEKA5nztRSeSgDyqsbBN6dCMr6rHwNDGAIk,4715
70
- xoscar/serialization/core.cp39-win_amd64.pyd,sha256=SRGdZTKtDAy70svgfsmUyb0XtswN1-w5ACAbLuf3HmI,300032
70
+ xoscar/serialization/core.cp39-win_amd64.pyd,sha256=dePU06pyFd5x7DY_5CmB-w0MoMx9GB_vasl2VN--6Ds,300032
71
71
  xoscar/serialization/core.pxd,sha256=X-47bqBM2Kzw5SkLqICdKD0gU6CpmLsBxC3kfW--wVk,1013
72
72
  xoscar/serialization/core.pyx,sha256=H6YZos-OHDxqFvu1vKvoH3Fhw3HzGn8dI3YPACFL5C0,31085
73
73
  xoscar/serialization/cuda.py,sha256=Fj4Cpr_YmkGceUCo0mQn8fRvmHP_5WcLdRx6epZ3RC0,3869
@@ -75,7 +75,7 @@ xoscar/serialization/exception.py,sha256=t6yZn_Ate04UE1RbabNh7mu739sdtwarjuPXWhA
75
75
  xoscar/serialization/numpy.py,sha256=C6WVx-Sdl2OHBAvVY34DFjAKXlekMbpc2ni6bR8wxYo,3001
76
76
  xoscar/serialization/pyfury.py,sha256=3ucal29Hr7PX9_1SfB2x43FE2xw_C0rLkVv3foL7qwM,1200
77
77
  xoscar/serialization/scipy.py,sha256=9ph-yoRoNiwUZTwQrn35U60VPirWlncXNAg6EXvqMR4,2554
78
- xoscar-0.3.2.dist-info/METADATA,sha256=JntIPeg3LYhNWmp19WZeEetJ5ykvrrkPXb2wInUVAOE,9471
79
- xoscar-0.3.2.dist-info/WHEEL,sha256=Z6c-bE0pUM47a70GvqO_SvH_XXU0lm62gEAKtoNJ08A,100
80
- xoscar-0.3.2.dist-info/top_level.txt,sha256=vYlqqY4Nys8Thm1hePIuUv8eQePdULVWMmt7lXtX_ZA,21
81
- xoscar-0.3.2.dist-info/RECORD,,
78
+ xoscar-0.3.3.dist-info/METADATA,sha256=lDKqSBjSqxoW874nb8K_qGA6V0TvEHkXySK-3whOOd8,9418
79
+ xoscar-0.3.3.dist-info/WHEEL,sha256=YorN2HPccIdfJm1vtDZTOGjQ579sMRaAowQ3R-HpNAE,100
80
+ xoscar-0.3.3.dist-info/top_level.txt,sha256=vYlqqY4Nys8Thm1hePIuUv8eQePdULVWMmt7lXtX_ZA,21
81
+ xoscar-0.3.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: bdist_wheel (0.44.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp39-cp39-win_amd64
5
5