xax 0.0.3__py3-none-any.whl → 0.0.5__py3-none-any.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.
xax/utils/experiments.py CHANGED
@@ -8,6 +8,7 @@ import hashlib
8
8
  import inspect
9
9
  import itertools
10
10
  import logging
11
+ import math
11
12
  import os
12
13
  import random
13
14
  import re
@@ -30,7 +31,7 @@ import requests
30
31
  from jaxtyping import Array
31
32
  from omegaconf import MISSING, DictConfig, ListConfig, OmegaConf
32
33
 
33
- from xax.core.conf import get_data_dir, get_pretrained_models_dir
34
+ from xax.core.conf import get_data_dir, get_pretrained_models_dir, load_user_config
34
35
  from xax.core.state import State
35
36
  from xax.utils.text import colored
36
37
 
@@ -665,6 +666,7 @@ class BaseFileDownloader(ABC):
665
666
  with requests.Session() as session:
666
667
  response = session.get(url, params=params, stream=True)
667
668
 
669
+ token: str | None = None
668
670
  for key, value in response.cookies.items():
669
671
  if key.startswith("download_warning"):
670
672
  token = value
@@ -756,3 +758,45 @@ def get_state_dict_prefix(
756
758
  if regexp is not None:
757
759
  ckpt = {k: v for k, v in ckpt.items() if regexp.match(k)}
758
760
  return ckpt
761
+
762
+
763
+ def split_n_items_across_workers(n: int, worker_id: int, num_workers: int) -> tuple[int, int]:
764
+ """Computes offsets for splitting N items across K workers.
765
+
766
+ This returns the start and end indices for the items to be processed by the
767
+ given worker. The end index is exclusive.
768
+
769
+ Args:
770
+ n: The number of items to process.
771
+ worker_id: The ID of the current worker.
772
+ num_workers: The total number of workers.
773
+
774
+ Returns:
775
+ The start and end index for the items in the current worker.
776
+ """
777
+ assert n >= num_workers, f"n ({n}) must be >= num_workers ({num_workers})"
778
+ assert 0 <= worker_id < num_workers, f"worker_id ({worker_id}) must be >= 0 and < num_workers ({num_workers})"
779
+
780
+ # The number of items to process per worker.
781
+ items_per_worker = math.ceil(n / num_workers)
782
+
783
+ # The start and end indices for the items to process.
784
+ start = worker_id * items_per_worker
785
+ end = min(start + items_per_worker, n)
786
+
787
+ return start, end
788
+
789
+
790
+ def num_workers(default: int) -> int:
791
+ max_workers = load_user_config().experiment.max_workers
792
+ if hasattr(os, "sched_getaffinity"):
793
+ try:
794
+ return min(len(os.sched_getaffinity(0)), max_workers)
795
+ except Exception:
796
+ pass
797
+ if (cpu_count := os.cpu_count()) is not None:
798
+ return min(cpu_count, max_workers)
799
+ return min(default, max_workers)
800
+
801
+
802
+ OmegaConf.register_new_resolver("mlfab.num_workers", num_workers, replace=True)
xax/utils/logging.py CHANGED
@@ -5,6 +5,8 @@ import math
5
5
  import socket
6
6
  import sys
7
7
 
8
+ from omegaconf import OmegaConf
9
+
8
10
  from xax.core.conf import load_user_config
9
11
  from xax.utils.text import Color, color_parts, colored
10
12
 
@@ -175,6 +177,33 @@ def configure_logging(prefix: str | None = None, *, rank: int | None = None, wor
175
177
  logging.getLogger("torch").setLevel(logging.WARNING)
176
178
 
177
179
 
180
+ def get_unused_port(default: int | None = None) -> int:
181
+ """Returns an unused port number on the local machine.
182
+
183
+ Args:
184
+ default: A default port to try before trying other ports.
185
+
186
+ Returns:
187
+ A port number which is currently unused
188
+ """
189
+ if default is not None:
190
+ sock = socket.socket()
191
+ try:
192
+ sock.bind(("", default))
193
+ return default
194
+ except OSError:
195
+ pass
196
+ finally:
197
+ sock.close()
198
+
199
+ sock = socket.socket()
200
+ sock.bind(("", 0))
201
+ return sock.getsockname()[1]
202
+
203
+
204
+ OmegaConf.register_new_resolver("mlfab.unused_port", get_unused_port, replace=True)
205
+
206
+
178
207
  def port_is_busy(port: int) -> int:
179
208
  """Checks whether a port is busy.
180
209
 
xax/utils/tensorboard.py CHANGED
@@ -1,11 +1,11 @@
1
1
  """Defines utility functions for interfacing with Tensorboard."""
2
2
 
3
3
  import functools
4
+ import io
4
5
  import time
5
6
  from pathlib import Path
6
7
  from typing import Literal, TypedDict
7
8
 
8
- import numpy as np
9
9
  from PIL.Image import Image as PILImage
10
10
  from tensorboard.compat.proto.config_pb2 import RunMetadata
11
11
  from tensorboard.compat.proto.event_pb2 import Event, TaggedRunMetadata
@@ -117,29 +117,44 @@ class TensorboardWriter:
117
117
  value: float,
118
118
  global_step: int | None = None,
119
119
  walltime: float | None = None,
120
+ new_style: bool = True,
120
121
  double_precision: bool = False,
121
122
  ) -> None:
122
- self.pb_writer.add_summary(
123
- Summary(
124
- value=[
125
- Summary.Value(
126
- tag=tag,
127
- tensor=(
128
- TensorProto(double_val=[value], dtype="DT_DOUBLE")
129
- if double_precision
130
- else TensorProto(float_val=[value], dtype="DT_FLOAT")
131
- ),
132
- metadata=SummaryMetadata(
133
- plugin_data=SummaryMetadata.PluginData(
134
- plugin_name="scalaras",
123
+ if new_style:
124
+ self.pb_writer.add_summary(
125
+ Summary(
126
+ value=[
127
+ Summary.Value(
128
+ tag=tag,
129
+ tensor=(
130
+ TensorProto(double_val=[value], dtype="DT_DOUBLE")
131
+ if double_precision
132
+ else TensorProto(float_val=[value], dtype="DT_FLOAT")
133
+ ),
134
+ metadata=SummaryMetadata(
135
+ plugin_data=SummaryMetadata.PluginData(
136
+ plugin_name="scalars",
137
+ ),
135
138
  ),
139
+ )
140
+ ],
141
+ ),
142
+ global_step=global_step,
143
+ walltime=walltime,
144
+ )
145
+ else:
146
+ self.pb_writer.add_summary(
147
+ Summary(
148
+ value=[
149
+ Summary.Value(
150
+ tag=tag,
151
+ simple_value=value,
136
152
  ),
137
- )
138
- ],
139
- ),
140
- global_step=global_step,
141
- walltime=walltime,
142
- )
153
+ ],
154
+ ),
155
+ global_step=global_step,
156
+ walltime=walltime,
157
+ )
143
158
 
144
159
  def add_image(
145
160
  self,
@@ -148,16 +163,21 @@ class TensorboardWriter:
148
163
  global_step: int | None = None,
149
164
  walltime: float | None = None,
150
165
  ) -> None:
151
- image_data = np.asarray(value.convert("RGB")).transpose(2, 0, 1) # HWC -> CHW
166
+ output = io.BytesIO()
167
+ value.convert("RGB").save(output, format="PNG")
168
+ image_string = output.getvalue()
169
+ output.close()
170
+
152
171
  self.pb_writer.add_summary(
153
172
  Summary(
154
173
  value=[
155
174
  Summary.Value(
156
175
  tag=tag,
157
- tensor=TensorProto(
158
- dtype="DT_FLOAT",
159
- tensor_shape=TensorShapeProto(dim=[TensorShapeProto.Dim(size=s) for s in image_data.shape]),
160
- float_val=image_data.flatten().tolist(),
176
+ image=Summary.Image(
177
+ height=value.height,
178
+ width=value.width,
179
+ colorspace=3, # RGB
180
+ encoded_image_string=image_string,
161
181
  ),
162
182
  ),
163
183
  ],
@@ -197,7 +217,6 @@ class TensorboardWriter:
197
217
 
198
218
 
199
219
  class TensorboardWriterKwargs(TypedDict):
200
- log_directory: Path
201
220
  max_queue_size: int
202
221
  flush_seconds: float
203
222
  filename_suffix: str
@@ -213,8 +232,9 @@ class TensorboardWriters:
213
232
  ) -> None:
214
233
  super().__init__()
215
234
 
235
+ self.log_directory = Path(log_directory)
236
+
216
237
  self.kwargs: TensorboardWriterKwargs = {
217
- "log_directory": Path(log_directory),
218
238
  "max_queue_size": max_queue_size,
219
239
  "flush_seconds": flush_seconds,
220
240
  "filename_suffix": filename_suffix,
@@ -222,11 +242,11 @@ class TensorboardWriters:
222
242
 
223
243
  @functools.cached_property
224
244
  def train_writer(self) -> TensorboardWriter:
225
- return TensorboardWriter(**self.kwargs)
245
+ return TensorboardWriter(self.log_directory / "train", **self.kwargs)
226
246
 
227
247
  @functools.cached_property
228
248
  def valid_writer(self) -> TensorboardWriter:
229
- return TensorboardWriter(**self.kwargs)
249
+ return TensorboardWriter(self.log_directory / "valid", **self.kwargs)
230
250
 
231
251
  def writer(self, phase: Phase) -> TensorboardWriter:
232
252
  match phase:
@@ -1,32 +1,33 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xax
3
- Version: 0.0.3
3
+ Version: 0.0.5
4
4
  Summary: The xax project
5
5
  Home-page: https://github.com/dpshai/xax
6
6
  Author: Benjamin Bolte
7
7
  Requires-Python: >=3.11
8
8
  Description-Content-Type: text/markdown
9
9
  License-File: LICENSE
10
- Requires-Dist: dpshdl
11
- Requires-Dist: equinox
12
- Requires-Dist: gitpython
13
10
  Requires-Dist: jax
14
11
  Requires-Dist: jaxtyping
15
- Requires-Dist: omegaconf
12
+ Requires-Dist: equinox
16
13
  Requires-Dist: optax
14
+ Requires-Dist: dpshdl
15
+ Requires-Dist: cloudpickle
17
16
  Requires-Dist: pillow
17
+ Requires-Dist: omegaconf
18
+ Requires-Dist: gitpython
19
+ Requires-Dist: tensorboard
18
20
  Requires-Dist: psutil
19
21
  Requires-Dist: requests
20
- Requires-Dist: tensorboard
21
- Requires-Dist: types-pillow
22
- Requires-Dist: types-psutil
23
- Requires-Dist: types-requests
24
22
  Provides-Extra: dev
25
- Requires-Dist: black ; extra == 'dev'
26
- Requires-Dist: darglint ; extra == 'dev'
27
- Requires-Dist: mypy ; extra == 'dev'
28
- Requires-Dist: pytest ; extra == 'dev'
29
- Requires-Dist: ruff ; extra == 'dev'
23
+ Requires-Dist: black; extra == "dev"
24
+ Requires-Dist: darglint; extra == "dev"
25
+ Requires-Dist: mypy; extra == "dev"
26
+ Requires-Dist: ruff; extra == "dev"
27
+ Requires-Dist: pytest; extra == "dev"
28
+ Requires-Dist: types-pillow; extra == "dev"
29
+ Requires-Dist: types-psutil; extra == "dev"
30
+ Requires-Dist: types-requests; extra == "dev"
30
31
 
31
32
  # xax
32
33
 
@@ -0,0 +1,52 @@
1
+ xax/__init__.py,sha256=3OQTnHGYgaux3i9gTYZxfK8F2zS_hK2QqD-G-Z1TfHQ,7623
2
+ xax/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ xax/requirements-dev.txt,sha256=qkscNkFzWd1S5fump-AKH53rR65v2x5FmboFdy_kKvs,128
4
+ xax/requirements.txt,sha256=DRn2B9d3mAr57-U3IOIrKm2nYz8H3cYgDy6EIC3SsuE,266
5
+ xax/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ xax/core/conf.py,sha256=hwgc5sJw0YRSegQLLrmIDtscev-H_a2ST1-V6BJ5aec,5915
7
+ xax/core/state.py,sha256=7lnVSytuhwPfcobPGdjfQ0QxbLgzWQNipKwXchd58QI,2695
8
+ xax/nn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ xax/nn/embeddings.py,sha256=bQGxBFxkLwi2MQLkRfGaHPH5P_KKB21HdI7VNWTKIOQ,11847
10
+ xax/nn/functions.py,sha256=CI_OmspaQwN9nl4hwefIU3_I7m6gBZwJ9aGK1JGUgr0,2713
11
+ xax/nn/parallel.py,sha256=fnTiT7MsG7eQrJvqwjIz2Ifo3P27TuxIJzmpGYSa_dQ,4608
12
+ xax/task/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ xax/task/base.py,sha256=n82Sw-kMLr-WZzh0c_vAAQ2b-DHRYs0U8biPRonBxKU,7252
14
+ xax/task/logger.py,sha256=MAFIgd6yO0pD3gJHfKTwUDcwaM8DZD3AZtFLvrQtlFo,26740
15
+ xax/task/script.py,sha256=oBGnScYa_X284fCajabPCcbaSEIqR8nO4d40dvMv3NQ,1011
16
+ xax/task/task.py,sha256=X7TV_gt6C4m_-Il22Uyr5iMm-eh15oH5v1dl96sv1go,1295
17
+ xax/task/launchers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ xax/task/launchers/base.py,sha256=8LB_r6YISKu1vq1zk3aVYmiedRr9MxE5IMRocs6unFI,731
19
+ xax/task/launchers/cli.py,sha256=cK7Nm-3fO-W2gTxpn3FEThsT2NvneS2w0UjA1Nt-84A,1402
20
+ xax/task/launchers/single_process.py,sha256=IoML-30g5c526yxkpbWSOtG_KpNQMakT7xujzB1gIAo,846
21
+ xax/task/launchers/staged.py,sha256=jYeT9u58CN4ldV-ltJiQXQglEWOnEckHWnHYjfJQaoY,1102
22
+ xax/task/loggers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
+ xax/task/loggers/callback.py,sha256=reaRuJs5iB6WWNgh3_tsuz_QPAlBC-5Ed2wCG_6Wj4M,2075
24
+ xax/task/loggers/json.py,sha256=yXHb1bmfsEnk4p0F1Up1ertWYdcPAFZm25NT8wE3Jb8,4045
25
+ xax/task/loggers/state.py,sha256=qyb-q8MdagN7BX-DhKucwoc45tIZJrPuvVDVoysTKC4,1576
26
+ xax/task/loggers/stdout.py,sha256=nxQXkS9JUR38RKsU9qj0dgePKguK0BFa9nl_BdGO8cE,6758
27
+ xax/task/loggers/tensorboard.py,sha256=DMYRDCQ9c-xHqO4kkZvc1-53PXCf2gX0aRiiAQDtHJ0,7293
28
+ xax/task/mixins/__init__.py,sha256=NkSAjMN5jpXE6LROIwMzX60z7UsTBpGs624_mNUWquo,745
29
+ xax/task/mixins/artifacts.py,sha256=G0984WuXII_R13IlJZn9En7iM83ISXKjeVYvn7j4wBs,3754
30
+ xax/task/mixins/checkpointing.py,sha256=JV91b5xyBUyZIbR3S-5UkBZNoAZYCnWx7Y-ayuU0lHQ,7989
31
+ xax/task/mixins/cpu_stats.py,sha256=Lqskt1t4usE6UslhANjwB0ZKOYmaC4dm9dnVKa6ERdA,8924
32
+ xax/task/mixins/data_loader.py,sha256=BPs0sYdctesnhS9nQ1rvT77MzLXznw5E4tAzWT1PpJY,5998
33
+ xax/task/mixins/gpu_stats.py,sha256=tFTNmtl9iMiLiYJSPg7gHR-ZxOP4P_ynzSmYNIAUoRw,8431
34
+ xax/task/mixins/logger.py,sha256=6XkjP_YUGY2CiDry0kDm1f9jqzJaLa1bPVYYnGjvSBU,2049
35
+ xax/task/mixins/process.py,sha256=HQAvEruvvfcS_IThrM4hKhFHZCAN2kFY_vEaZGLeZS8,1428
36
+ xax/task/mixins/runnable.py,sha256=d5-qyIpmNPtbTzE7qFJGGCPSREEDhX1VApUJPNDWye0,1933
37
+ xax/task/mixins/step_wrapper.py,sha256=Do4eGgZVuqDX9ZGDxQdfn6pRbUnHjQBAkTF0vnNH31E,1472
38
+ xax/task/mixins/train.py,sha256=Xeb0N9j-Znz5QnMDCXDGPqUSKMNLJkd8oF8giN45l2U,20099
39
+ xax/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ xax/utils/experiments.py,sha256=qT3H0fyVH8DN417x7T0Xmz4SKoogW81-EHcZfyktFI8,28300
41
+ xax/utils/jax.py,sha256=VzEVB766UyH3_cgN6UP0FkCsDuGlYg5KJj8YJS4yYUk,439
42
+ xax/utils/logging.py,sha256=ST1hp2C2xntVVJBUHwo3YxPK19fBLNvHU2WGO1xqcXA,6418
43
+ xax/utils/numpy.py,sha256=_jOXVi-d2AtJnRftPkRK5MDMzsU8slgw-Jjv4GRm6ns,1197
44
+ xax/utils/tensorboard.py,sha256=XqxUlryFVsb75jE36uLcuoUhSr3nWg_-dzji2h6U_rI,8245
45
+ xax/utils/text.py,sha256=zo1sAoZe59GkpcpaHBVOQ0OekSMGXvOAyNa3lOJozCY,10628
46
+ xax/utils/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
+ xax/utils/data/collate.py,sha256=Rd9vMomr_S_zCa_Hi4dO-8ntzAfVwndIUtuXFA3iNcc,7066
48
+ xax-0.0.5.dist-info/LICENSE,sha256=HCN2bImAzUOXldAZZI7JZ9PYq6OwMlDAP_PpX1HnuN0,1071
49
+ xax-0.0.5.dist-info/METADATA,sha256=VCiQmbjwZtiuORVyB0dloFTgLWtnK4o3FaolNWvf-A4,937
50
+ xax-0.0.5.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
51
+ xax-0.0.5.dist-info/top_level.txt,sha256=g4Au_r2XhvZ-lTybviH-Fh9g0zF4DAYHYxPue1-xbs8,4
52
+ xax-0.0.5.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.42.0)
2
+ Generator: setuptools (75.6.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,49 +0,0 @@
1
- xax/__init__.py,sha256=awE9-hwGPLSx2ywUAUoeBYYm3ztERRhejiZTM8C2ft4,6160
2
- xax/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- xax/requirements-dev.txt,sha256=aa9ql8CtmuLTvswvwXYlfAxRL0MEyondkMVcuZuM1A8,56
4
- xax/requirements.txt,sha256=eJ8pC2D3CrbjcETujBG-j3y9dt6WMGpT-wQQzAUh2-4,161
5
- xax/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- xax/core/conf.py,sha256=DrLXM0VED5RexuqF8-LOljGrnU5soYFgugIrvx6tGmE,5841
7
- xax/core/state.py,sha256=7lnVSytuhwPfcobPGdjfQ0QxbLgzWQNipKwXchd58QI,2695
8
- xax/nn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- xax/nn/functions.py,sha256=ejIltzHagoiKjMEkfVpcIFj_OS3GkMd5JElWUDCrT6Y,2471
10
- xax/nn/parallel.py,sha256=fnTiT7MsG7eQrJvqwjIz2Ifo3P27TuxIJzmpGYSa_dQ,4608
11
- xax/task/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- xax/task/base.py,sha256=4oueHzToECJYBY-umnrVqDY9tJ6bT18cP97TtaQukBE,7411
13
- xax/task/logger.py,sha256=lmZ-cfiBisNskz1JDrQmtydT0uwoAAmr38V8-W8XqiU,29200
14
- xax/task/script.py,sha256=oBGnScYa_X284fCajabPCcbaSEIqR8nO4d40dvMv3NQ,1011
15
- xax/task/task.py,sha256=mUY7lEug9dW5yrTyT1V5gro5OosnmilMkkWLC-FbI4E,1266
16
- xax/task/launchers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
- xax/task/launchers/base.py,sha256=8LB_r6YISKu1vq1zk3aVYmiedRr9MxE5IMRocs6unFI,731
18
- xax/task/launchers/cli.py,sha256=cK7Nm-3fO-W2gTxpn3FEThsT2NvneS2w0UjA1Nt-84A,1402
19
- xax/task/launchers/single_process.py,sha256=IoML-30g5c526yxkpbWSOtG_KpNQMakT7xujzB1gIAo,846
20
- xax/task/launchers/staged.py,sha256=jYeT9u58CN4ldV-ltJiQXQglEWOnEckHWnHYjfJQaoY,1102
21
- xax/task/loggers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- xax/task/loggers/json.py,sha256=yXHb1bmfsEnk4p0F1Up1ertWYdcPAFZm25NT8wE3Jb8,4045
23
- xax/task/loggers/state.py,sha256=qyb-q8MdagN7BX-DhKucwoc45tIZJrPuvVDVoysTKC4,1576
24
- xax/task/loggers/stdout.py,sha256=nxQXkS9JUR38RKsU9qj0dgePKguK0BFa9nl_BdGO8cE,6758
25
- xax/task/loggers/tensorboard.py,sha256=Vt9Vr6i5Bmon7z0vykiQKcx_X9qsYTrRgKf1isLQrEA,7388
26
- xax/task/mixins/__init__.py,sha256=NB8CVbx-zxMpWDYeQJJCUIrUOfrNeVc8mE59qXayEsc,685
27
- xax/task/mixins/artifacts.py,sha256=W8Y40aqa7QL8mfM5wMRBszLG8Xpv0VZMT3yRnFLfCOU,3568
28
- xax/task/mixins/cpu_stats.py,sha256=BeG26vkfy4ePAXZfKfoONyHwpCplK-YrbeeEkVNmF8E,8854
29
- xax/task/mixins/data_loader.py,sha256=CWoozUdNd5UgJ2wzVktHTDBDplb0TZJAThq53sYrKsM,6160
30
- xax/task/mixins/gpu_stats.py,sha256=HHwBGr56u5MfV_JZDgDvyxnxNgVSr-yNLLfy2tGzyW8,8410
31
- xax/task/mixins/logger.py,sha256=lWO3nsEdA92Cd8z_JAiD7VBLgiTr2FS5JK2ZJSajexc,9281
32
- xax/task/mixins/process.py,sha256=am6HeAI9Mw7FmrpYX8tMfIzgq-WSYZwm5T6qKuUlOsw,1327
33
- xax/task/mixins/runnable.py,sha256=d5-qyIpmNPtbTzE7qFJGGCPSREEDhX1VApUJPNDWye0,1933
34
- xax/task/mixins/step_wrapper.py,sha256=Do4eGgZVuqDX9ZGDxQdfn6pRbUnHjQBAkTF0vnNH31E,1472
35
- xax/task/mixins/train.py,sha256=blNJEjUL6FnvHUIhIa8a5au2TUw3OEv57hygfIGfNmI,18626
36
- xax/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
- xax/utils/experiments.py,sha256=EgTTugyBznGhyft04RIA5tDnDGIrib3y3FKa2J6i4sU,26766
38
- xax/utils/jax.py,sha256=VzEVB766UyH3_cgN6UP0FkCsDuGlYg5KJj8YJS4yYUk,439
39
- xax/utils/logging.py,sha256=CIOvoH7iq70IRvysG-14OuHSgdvoIfzttwMWiw2yu3E,5732
40
- xax/utils/numpy.py,sha256=_jOXVi-d2AtJnRftPkRK5MDMzsU8slgw-Jjv4GRm6ns,1197
41
- xax/utils/tensorboard.py,sha256=BEa1OmOl_7eiq9yahMI2vd6sc_VEBiZnzkEPBGv3IVs,7654
42
- xax/utils/text.py,sha256=zo1sAoZe59GkpcpaHBVOQ0OekSMGXvOAyNa3lOJozCY,10628
43
- xax/utils/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
- xax/utils/data/collate.py,sha256=fuXTzOxdi-STgtRUU2DyJTF72Yz42kWLr6nlszZs6tM,7003
45
- xax-0.0.3.dist-info/LICENSE,sha256=HCN2bImAzUOXldAZZI7JZ9PYq6OwMlDAP_PpX1HnuN0,1071
46
- xax-0.0.3.dist-info/METADATA,sha256=qLBYRcvPbllBPh-VVLDcpSjaYWQJyQxhwrjlx98DTV0,867
47
- xax-0.0.3.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
48
- xax-0.0.3.dist-info/top_level.txt,sha256=g4Au_r2XhvZ-lTybviH-Fh9g0zF4DAYHYxPue1-xbs8,4
49
- xax-0.0.3.dist-info/RECORD,,
File without changes