lucid-dl 2.11.0__py3-none-any.whl → 2.11.2__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.
@@ -1,9 +1,15 @@
1
1
  import lucid
2
2
  import lucid.nn as nn
3
- from lucid._tensor import Tensor
4
3
 
5
4
  from lucid.types import _ShapeLike
6
5
 
6
+ from lucid._tensor import Tensor
7
+ from lucid.nn._kernel.norm import (
8
+ layer_norm_kernel,
9
+ batch_norm_kernel,
10
+ group_norm_kernel,
11
+ )
12
+
7
13
 
8
14
  def normalize(
9
15
  input_: Tensor, ord: int = 2, axis: int = 1, eps: float = 1e-12
@@ -25,44 +31,34 @@ def batch_norm(
25
31
  eps: float = 1e-5,
26
32
  ) -> Tensor:
27
33
  C = input_.shape[1]
28
- spatial_dim = input_.ndim - 2
29
- use_batch_stats = training or running_mean is None or running_var is None
30
-
31
- if use_batch_stats:
32
- batch_mean = input_.mean(axis=(0, *range(2, input_.ndim)), keepdims=True)
33
- batch_var = input_.var(axis=(0, *range(2, input_.ndim)), keepdims=True)
34
-
35
- if running_mean is not None and running_var is not None:
36
- running_stats_ = (
37
- momentum * batch_mean.flatten() + (1 - momentum) * running_mean,
38
- momentum * batch_var.flatten() + (1 - momentum) * running_var,
39
- )
40
-
41
- if isinstance(running_mean, nn.Buffer) and isinstance(
42
- running_var, nn.Buffer
43
- ):
44
- running_mean.data = running_stats_[0].data
45
- running_var.data = running_stats_[1].data
46
- else:
47
- running_mean, running_var = running_stats_
48
-
49
- mean = batch_mean
50
- var = batch_var
34
+ if running_mean is None or running_var is None:
35
+ running_mean = lucid.zeros((C,), device=input_.device)
36
+ running_var = lucid.ones((C,), device=input_.device)
37
+ has_running = False
51
38
  else:
52
- mean = running_mean.reshape(1, C, *(1,) * spatial_dim)
53
- var = running_var.reshape(1, C, *(1,) * spatial_dim)
54
-
55
- normalized = (input_ - mean) / lucid.sqrt(var + eps)
39
+ has_running = True
56
40
 
57
- if weight is not None:
58
- weight = weight.reshape((1, C) + (1,) * spatial_dim)
59
- normalized *= weight
41
+ if weight is None:
42
+ weight = lucid.ones((C,), device=input_.device)
43
+ has_weight = False
44
+ else:
45
+ has_weight = True
60
46
 
61
- if bias is not None:
62
- bias = bias.reshape((1, C) + (1,) * spatial_dim)
63
- normalized += bias
47
+ if bias is None:
48
+ bias = lucid.zeros((C,), device=input_.device)
49
+ has_bias = False
50
+ else:
51
+ has_bias = True
64
52
 
65
- return normalized
53
+ op = batch_norm_kernel(
54
+ eps=eps,
55
+ momentum=momentum,
56
+ training=training,
57
+ has_running=has_running,
58
+ has_weight=has_weight,
59
+ has_bias=has_bias,
60
+ )
61
+ return op(input_, running_mean, running_var, weight, bias)
66
62
 
67
63
 
68
64
  def layer_norm(
@@ -77,21 +73,22 @@ def layer_norm(
77
73
  "Input tensor's normalized shape must match "
78
74
  + "the provided `normalized_shape`."
79
75
  )
76
+ if weight is None:
77
+ weight = lucid.ones(normalized_shape, device=input_.device)
78
+ has_weight = False
79
+ else:
80
+ has_weight = True
80
81
 
81
- mean = input_.mean(axis=tuple(range(-len(normalized_shape), 0)), keepdims=True)
82
- var = input_.var(axis=tuple(range(-len(normalized_shape), 0)), keepdims=True)
83
-
84
- normalized = (input_ - mean) / lucid.sqrt(var + eps)
85
- if weight is not None:
86
- normalized *= weight.reshape(
87
- (1,) * (input_.ndim - len(normalized_shape)) + normalized_shape
88
- )
89
- if bias is not None:
90
- normalized += bias.reshape(
91
- (1,) * (input_.ndim - len(normalized_shape)) + normalized_shape
92
- )
82
+ if bias is None:
83
+ bias = lucid.zeros(normalized_shape, device=input_.device)
84
+ has_bias = False
85
+ else:
86
+ has_bias = True
93
87
 
94
- return normalized
88
+ op = layer_norm_kernel(
89
+ normalized_shape, eps=eps, has_weight=has_weight, has_bias=has_bias
90
+ )
91
+ return op(input_, weight, bias)
95
92
 
96
93
 
97
94
  def instance_norm(
@@ -155,29 +152,23 @@ def group_norm(
155
152
  bias: Tensor | None,
156
153
  eps: float = 1e-5,
157
154
  ) -> Tensor:
158
- N, C, *spatial_dims = input_.shape
159
- assert C % num_groups == 0, "Number of channels must be divisible by num_groups"
160
-
161
- group_size = C // num_groups
162
- new_shape = (N, num_groups, group_size, *spatial_dims)
163
- reshaped = input_.reshape(*new_shape)
164
-
165
- axes = (2,) + tuple(range(3, reshaped.ndim))
166
- mean = reshaped.mean(axis=axes, keepdims=True)
167
- var = reshaped.var(axis=axes, keepdims=True)
168
-
169
- normalized = (reshaped - mean) / lucid.sqrt(var + eps)
170
- normalized = normalized.reshape(N, C, *spatial_dims)
171
-
172
- if weight is not None:
173
- weight = weight.reshape(1, C, *(1,) * len(spatial_dims))
174
- normalized *= weight
155
+ C = input_.shape[1]
156
+ if weight is None:
157
+ weight = lucid.ones((C,), device=input_.device)
158
+ has_weight = False
159
+ else:
160
+ has_weight = True
175
161
 
176
- if bias is not None:
177
- bias = bias.reshape(1, C, *(1,) * len(spatial_dims))
178
- normalized += bias
162
+ if bias is None:
163
+ bias = lucid.zeros((C,), device=input_.device)
164
+ has_bias = False
165
+ else:
166
+ has_bias = True
179
167
 
180
- return normalized
168
+ op = group_norm_kernel(
169
+ num_groups=num_groups, eps=eps, has_weight=has_weight, has_bias=has_bias
170
+ )
171
+ return op(input_, weight, bias)
181
172
 
182
173
 
183
174
  def global_response_norm(
@@ -2,7 +2,7 @@ import math
2
2
  from typing import Literal
3
3
 
4
4
  from lucid._tensor import Tensor
5
- from lucid._backend.pool import avg_pool_nd_op, max_pool_nd_op
5
+ from lucid.nn._kernel.pool import pool_nd_kernel
6
6
 
7
7
 
8
8
  def avg_pool1d(
@@ -11,7 +11,7 @@ def avg_pool1d(
11
11
  stride: int | tuple[int] = 1,
12
12
  padding: int | tuple[int] = 0,
13
13
  ) -> Tensor:
14
- return avg_pool_nd_op(kernel_size, stride, padding)(input_)
14
+ return pool_nd_kernel(kernel_size, stride, padding, mode="avg")(input_)
15
15
 
16
16
 
17
17
  def avg_pool2d(
@@ -20,7 +20,7 @@ def avg_pool2d(
20
20
  stride: int | tuple[int, int] = 1,
21
21
  padding: int | tuple[int, int] = 0,
22
22
  ) -> Tensor:
23
- return avg_pool_nd_op(kernel_size, stride, padding)(input_)
23
+ return pool_nd_kernel(kernel_size, stride, padding, mode="avg")(input_)
24
24
 
25
25
 
26
26
  def avg_pool3d(
@@ -29,7 +29,7 @@ def avg_pool3d(
29
29
  stride: int | tuple[int, int, int] = 1,
30
30
  padding: int | tuple[int, int, int] = 0,
31
31
  ) -> Tensor:
32
- return avg_pool_nd_op(kernel_size, stride, padding)(input_)
32
+ return pool_nd_kernel(kernel_size, stride, padding, mode="avg")(input_)
33
33
 
34
34
 
35
35
  def max_pool1d(
@@ -38,7 +38,7 @@ def max_pool1d(
38
38
  stride: int | tuple[int] = 1,
39
39
  padding: int | tuple[int] = 0,
40
40
  ) -> Tensor:
41
- return max_pool_nd_op(kernel_size, stride, padding)(input_)
41
+ return pool_nd_kernel(kernel_size, stride, padding, mode="max")(input_)
42
42
 
43
43
 
44
44
  def max_pool2d(
@@ -47,7 +47,7 @@ def max_pool2d(
47
47
  stride: int | tuple[int, int] = 1,
48
48
  padding: int | tuple[int, int] = 0,
49
49
  ) -> Tensor:
50
- return max_pool_nd_op(kernel_size, stride, padding)(input_)
50
+ return pool_nd_kernel(kernel_size, stride, padding, mode="max")(input_)
51
51
 
52
52
 
53
53
  def max_pool3d(
@@ -56,7 +56,7 @@ def max_pool3d(
56
56
  stride: int | tuple[int, int, int] = 1,
57
57
  padding: int | tuple[int, int, int] = 0,
58
58
  ) -> Tensor:
59
- return max_pool_nd_op(kernel_size, stride, padding)(input_)
59
+ return pool_nd_kernel(kernel_size, stride, padding, mode="max")(input_)
60
60
 
61
61
 
62
62
  def adaptive_pool1d(
@@ -4,6 +4,8 @@ import lucid.nn.functional
4
4
  from lucid._tensor import Tensor
5
5
  from lucid.types import _Scalar, Numeric
6
6
 
7
+ from lucid.nn._kernel.embedding import embedding_kernel
8
+
7
9
 
8
10
  def _interpolate_bilinear(
9
11
  input_: Tensor, size: tuple[int, int], align_corners: bool = False
@@ -129,7 +131,9 @@ def embedding(
129
131
  max_norm: float | None = None,
130
132
  norm_type: float = 2.0,
131
133
  ) -> Tensor:
132
- output = weight[input_.astype(lucid.Int)]
134
+ indices = input_.astype(lucid.Int)
135
+ op = embedding_kernel()
136
+ output = op(indices, weight)
133
137
  if padding_idx is not None:
134
138
  mask = input_.data == padding_idx
135
139
  output *= 1 - mask[..., None]
lucid/nn/init/_dist.py CHANGED
@@ -26,6 +26,7 @@ def _calculate_fan_in_and_fan_out(tensor: Tensor) -> tuple[int, int]:
26
26
 
27
27
 
28
28
  def _assign_like(tensor: Tensor, data: np.ndarray) -> None:
29
+ tensor._version += 1
29
30
  if tensor.is_cpu():
30
31
  tensor.data = np.asarray(data, dtype=tensor.data.dtype)
31
32
  else:
lucid/types.py CHANGED
@@ -2,6 +2,7 @@ from typing import (
2
2
  Any,
3
3
  Callable,
4
4
  Protocol,
5
+ Self,
5
6
  Sequence,
6
7
  Literal,
7
8
  TypeAlias,
@@ -9,7 +10,6 @@ from typing import (
9
10
  )
10
11
  import re
11
12
 
12
- # NOTE: This module retains module independency.
13
13
  import numpy as np
14
14
  import mlx.core as mx
15
15
 
@@ -20,6 +20,8 @@ _Scalar = int | float | complex
20
20
  _NumPyArray: TypeAlias = np.ndarray
21
21
  _MLXArray: TypeAlias = mx.array
22
22
 
23
+ _TensorData = _NumPyArray | _MLXArray
24
+
23
25
  _Gradient = _NumPyArray | _MLXArray | None
24
26
 
25
27
  _ArrayOrScalar = _Scalar | list[_Scalar] | _NumPyArray | _MLXArray
@@ -55,11 +57,14 @@ class _TensorLike(Protocol):
55
57
  _prev: list[_TensorLike]
56
58
  _backward_op: Any
57
59
  _backward_hooks: Any
60
+ _version: int
58
61
 
59
62
  def to(self, device: _DeviceType) -> None: ...
60
63
 
61
64
  def free(self) -> None: ...
62
65
 
66
+ def new_tensor(self) -> _TensorLike: ...
67
+
63
68
  def is_cpu(self) -> bool: ...
64
69
 
65
70
  def is_gpu(self) -> bool: ...
@@ -132,8 +137,18 @@ class Numeric:
132
137
 
133
138
  raise TypeError(f"Unsupported dtype: {dtype}")
134
139
 
140
+ def __eq__(self, other: Self) -> bool:
141
+ if self.base_dtype is not other.base_dtype:
142
+ return False
143
+ if self.is_bit_free:
144
+ return True if other.is_bit_free else False
145
+ return True if other.is_bit_free or self.bits == other.bits else False
146
+
147
+ def __hash__(self) -> int:
148
+ return hash(str(self))
149
+
135
150
  def __str__(self) -> str:
136
- return self.base_dtype.__name__ + str(self.bits)
151
+ return self.base_dtype.__name__ + (str(self.bits) if self.bits else "")
137
152
 
138
153
  def __repr__(self) -> str:
139
154
  return (
@@ -148,11 +163,18 @@ Int16 = Numeric(int, bits=16)
148
163
  Int32 = Numeric(int, bits=32)
149
164
  Int64 = Numeric(int, bits=64)
150
165
 
166
+ Char = Int8
167
+ Short = Int16
168
+ Long = Int64
169
+
151
170
  Float = Numeric(float, None)
152
171
  Float16 = Numeric(float, bits=16)
153
172
  Float32 = Numeric(float, bits=32)
154
173
  Float64 = Numeric(float, bits=64)
155
174
 
175
+ Half = Float16
176
+ Double = Float64
177
+
156
178
  Complex = Numeric(complex, None)
157
179
  Complex64 = Numeric(complex, bits=64)
158
180
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lucid-dl
3
- Version: 2.11.0
3
+ Version: 2.11.2
4
4
  Summary: Lumerico's Comprehensive Interface for Deep Learning
5
5
  Home-page: https://github.com/ChanLumerico/lucid
6
6
  Author: ChanLumerico
@@ -8,7 +8,7 @@ Author-email: greensox284@gmail.com
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: License :: OSI Approved :: MIT License
10
10
  Classifier: Operating System :: OS Independent
11
- Requires-Python: >=3.12
11
+ Requires-Python: >=3.14
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
14
  Requires-Dist: numpy
@@ -33,7 +33,7 @@ Dynamic: summary
33
33
  [![PyPI Total Downloads](https://static.pepy.tech/personalized-badge/lucid-dl?period=total&units=NONE&left_color=GRAY&right_color=yellow&left_text=total%20downloads)](https://pepy.tech/projects/lucid-dl)
34
34
  ![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/ChanLumerico/lucid.svg)
35
35
  ![Code Style](https://img.shields.io/badge/code%20style-black-000000.svg)
36
- ![Lines of Code](https://img.shields.io/badge/lines%20of%20code-27.7k-purple.svg)
36
+ ![Lines of Code](https://img.shields.io/badge/dynamic/json?label=Lines%20of%20Code&color=purple&url=https%3A%2F%2Fraw.githubusercontent.com%2FChanLumerico%2Flucid%2Fmain%2Floc%2Floc_badge.json&query=%24.linesOfCode&cacheSeconds=3600)
37
37
 
38
38
  **Lucid** is a minimalist deep learning framework built entirely from scratch in Python. It offers a pedagogically rich environment to explore the foundations of modern deep learning systems, including autodiff, neural network modules, and GPU acceleration — all while staying lightweight, readable, and free of complex dependencies.
39
39
 
@@ -48,9 +48,11 @@ Whether you're a student, educator, or an advanced researcher seeking to demysti
48
48
 
49
49
  ### 🔥 What's New
50
50
 
51
- - Now supports [**`Safetensors`**](https://github.com/huggingface/safetensors) for Lucid neural module porting along with the legacy `.lcd` format
51
+ - Added various inplace tensor operations (e.g. `a.add_(b)`, `a.mul_(b)`)
52
52
 
53
- - Branched a Stand-alone Autograd Engine as `lucid.autograd`
53
+ - Added **Noise Conditional Score Network(NCSN)** to `lucid.models.NCSN`
54
+
55
+ - Branched a Stand-Alone Autograd Engine as `lucid.autograd`
54
56
 
55
57
  - Provides a generalized API of computing gradients:
56
58
 
@@ -1,13 +1,11 @@
1
- lucid/__init__.py,sha256=Rd4OF5hgSNFuSzeB4--gfkRrrQpSEhYJ10-vV93YShk,9089
1
+ lucid/__init__.py,sha256=EwNZkKALNS54RQw_D_1BtqbBo3kFMi4uSveSs6i-bdM,9161
2
2
  lucid/error.py,sha256=qnTiVuZm3c5-DIt-OOyobZ7RUm7E1K4NR0j998LG1ug,709
3
3
  lucid/port.py,sha256=Kt1YaSWef_eKF4KRj-UFhirvFC5urEESfYQ_BSlBZGE,3811
4
- lucid/types.py,sha256=7mkE4_kAn6I8bToqoNb4E5IKwVOjYMQ_kMXZB7O_KeA,4310
4
+ lucid/types.py,sha256=XFeLUXhtMXGh9liRPB3X49PbJSK3bcOA6KN1gvCjksA,4818
5
5
  lucid/_backend/__init__.py,sha256=n1bnYdeb_bNDBKASWGywTRa0Ne9hMAkal3AuVZJgovI,5
6
- lucid/_backend/conv.py,sha256=EkU_AbNcSFJWwLzk7tY4OBaA5RUh44CgDcVGviH_AZA,16641
7
- lucid/_backend/core.py,sha256=TYuLbv5V-H3sxhgTjwUO2iPxJ6TIJjsYx8EugpUGJ2g,8531
8
- lucid/_backend/metal.py,sha256=I5EsTbb1Oc1qjr7YvPv1W92O5XNRmbTz0fiD5358Zhk,4158
9
- lucid/_backend/pool.py,sha256=SRmw9ZShpu9g7_SiZ-o1oLvIbf093ruCfdNCaLYLm3M,11207
10
- lucid/_func/__init__.py,sha256=fGd4Vv--Kuwrwc4w9ZSYEz3Bqb-O-kY5KSBKM6u0ndE,13705
6
+ lucid/_backend/core.py,sha256=neZF9uQlwNp-yHeyi0IbKlN556O-lsqThsIFExsf8-Y,11791
7
+ lucid/_backend/metal.py,sha256=vQegTENuPjeAM_EIXfuOpnIXZBeMbGVxCFvm4s-_NNo,4215
8
+ lucid/_func/__init__.py,sha256=ZOA1hnnDwwXbAUoLInwsA_0sMet89bw3XlOlft7UqnA,17062
11
9
  lucid/_func/bfunc.py,sha256=HtU6T_SV6VdMFTKZ__EqWXP9UKGVPT5XkRdgGRtV2MA,20479
12
10
  lucid/_func/gfunc.py,sha256=_gEJnYnAYhcN6aV1Z6ArIOGTgd0NEB2_eM86tE6uq-Q,4866
13
11
  lucid/_func/ufunc.py,sha256=AnCSykuYC0fNNoZso-TM60Rlq_4c54uMYOG3BHdvy20,30261
@@ -15,18 +13,18 @@ lucid/_fusion/__init__.py,sha256=SVzLiFzs4m1mMOpefKDLFkYqV0zV5FGwFd9hEbUZtSo,68
15
13
  lucid/_fusion/base.py,sha256=d6nWuPjYxkie9Xrtbj3JVusnIN61PIoSFFSthJNm9os,3821
16
14
  lucid/_fusion/func.py,sha256=9tXzB-QNrx_AvNJiPto807faXKlzjuMG4o9gRgI5usc,1659
17
15
  lucid/_tensor/__init__.py,sha256=wFWAMhTnQwThNiBEIT4fcw4ryIm8A4AoR-m9KDhklOQ,40
18
- lucid/_tensor/tensor.py,sha256=kccMHLPi2aGpkjwzEb7SBpp3Hhbe1TZv3VUDUSOv2ik,13570
19
- lucid/_tensor/tensor_ops.py,sha256=5XtqcPbrkOb87pVTSOMNaje9K78tgLpsNdV8XXnbpHc,3991
16
+ lucid/_tensor/base.py,sha256=pEeL4O-R_xFbugdBG8mWipP_pEhtIhWPSgAgHc51ZcQ,5262
17
+ lucid/_tensor/tensor.py,sha256=BLqpVqxP657W8j-oq7la9IVzH5RZnvQDKEMsU1s5rjM,14821
20
18
  lucid/_util/__init__.py,sha256=NgOleItHJGVLdJlKHKfpzuSl3vofzJpNsZByHAYJmKs,6838
21
19
  lucid/_util/func.py,sha256=ZODVlGdAejMTJnwEls7yMCI5WJ9Thkb3RIq1WwQCS4E,44239
22
- lucid/autograd/__init__.py,sha256=uKuGXUUSF8rBx7iEuVA6a_AhY9wfkC82TPmc1AKbay4,6675
20
+ lucid/autograd/__init__.py,sha256=hDoK_B2chRFVhoxsT4vxRKangzBEMWqF8gj2hdoTenk,6775
23
21
  lucid/data/__init__.py,sha256=qrDIQsnix5ZUEa0yrtomaaWbNJyJ3xEr2gdhRvg70_8,118
24
22
  lucid/data/_base.py,sha256=RM8xpBl8qFhm19n7eER_jOsRaxkL3rbOkwUvn6VetSE,5921
25
23
  lucid/data/_util.py,sha256=UsbliOrGmM0f1vqppoBPn3RSx53PIqcVx_yVOlHZB6A,1985
26
24
  lucid/datasets/__init__.py,sha256=vFlNOP38SSYG75_Yf0Jbyw3okSO7sY4wIjSxIzzIgWg,103
27
25
  lucid/datasets/_base.py,sha256=yeXPm3La3Beel7U_yPrxjXgGtjndJ3T6NYaQ2_H_Fak,1325
28
26
  lucid/datasets/cifar.py,sha256=Wf9r6PSgwFuuYsnZDEQOFNB-06AkqW4DrVsVPRyxEF0,3704
29
- lucid/datasets/mnist.py,sha256=mLjcp8Jx8987F21J13snH7cdG75qZRSHMuKYXV7QFt4,3739
27
+ lucid/datasets/mnist.py,sha256=PUXW2UwmlXJFVJiNkI9Jm58Qe4qWHGA63znkk-y9INM,8603
30
28
  lucid/einops/__init__.py,sha256=9Dlmfw6PsIU9b_a89Zre4yV2rztRHPCL4QpsUnXJwjM,802
31
29
  lucid/einops/_func.py,sha256=XXsX9lse_0turKoFnOTtLdY6hBUi0gq_8K81G7nr80I,21026
32
30
  lucid/linalg/__init__.py,sha256=N-LrlC3qSsOMt6Ad1-PP3Qc3QH6EWNf5P50GBvwb9aQ,1118
@@ -60,8 +58,9 @@ lucid/models/imgclf/vgg.py,sha256=fWy78AAHJre3Msy4DK5nhQwThI-7frsdqRS-JYtFiXM,24
60
58
  lucid/models/imgclf/vit.py,sha256=NXzPIiyXxcE1-g25m36-_YwKnJZ0gl1-jf7G3V12jS0,3594
61
59
  lucid/models/imgclf/xception.py,sha256=Y7YKCzF_y4r864hLouW0eE7M-kxA59SiI3-iIFsXVhQ,3728
62
60
  lucid/models/imgclf/zfnet.py,sha256=brH5tHLVWTUfCqu-BwfFb0yZV9p5DmXN4O6cyP3U26U,1469
63
- lucid/models/imggen/__init__.py,sha256=bEKRZdPj4YNlyHJYAT1kNmyz0ezk7EAju8tCkDaPhWU,39
61
+ lucid/models/imggen/__init__.py,sha256=J6MlEHqXxAYINbeQmyb85ev_IEOvQDTxTQjPgX6hdpY,59
64
62
  lucid/models/imggen/ddpm.py,sha256=Nyi5bp7WMzqZ8Xl2AXuLsMmdz9QSZifbbmMPMeY1YfQ,10752
63
+ lucid/models/imggen/ncsn.py,sha256=TF_kqnXcPZx4C_eIBqwyeRf3jp7KtiHy3SxQDnbeCj4,13555
65
64
  lucid/models/imggen/vae.py,sha256=avR8W0rzIsUyJF6veJCIEHavRsPjJsSuTDqzO2wj6sU,4084
66
65
  lucid/models/objdet/__init__.py,sha256=y8_3gjSKlD8Pu0HYburcJ1FAOb4SG5eza_lg9SdFjy8,140
67
66
  lucid/models/objdet/detr.py,sha256=i-KbNoPA9nUuUVBAKRHER-NB6z_sFF5r3Y3oplRaJkI,30336
@@ -82,19 +81,27 @@ lucid/nn/fused.py,sha256=75fcXuo6fHSO-JtjuKhowhHSDr4qc5871WR63sUzH0g,5492
82
81
  lucid/nn/module.py,sha256=XvFWJ8NqXeZpr3RmKBQBz5eqT535Oi_7DaPN1Zi9gJc,21971
83
82
  lucid/nn/parameter.py,sha256=NQS65YKn2B59wZbZIoT1mpDsU_F08y3yLi7hmV1B6yo,1232
84
83
  lucid/nn/util.py,sha256=Yw1iBSPrGV_r_F51qpqLYdafNE_hyaA0DPWYP-rjaig,1699
85
- lucid/nn/functional/__init__.py,sha256=90Zi7jClPOiiSYx-Qkg0QTideKD6GigbWON9eFCoxzg,13869
86
- lucid/nn/functional/_activation.py,sha256=nQVwArvPuwkUpLMLCNABTw96Zgw9VsPB8SyXCL6t2LM,1331
87
- lucid/nn/functional/_attention.py,sha256=nrZF3-2AR03kNo1PGNszujhWlAVcab_FNQwOCWZT47I,946
88
- lucid/nn/functional/_conv.py,sha256=dbbnkZp88VYOhqJgklkREnfAknZyc19qF1rC46aLsRs,5798
84
+ lucid/nn/_kernel/__init__.py,sha256=n1bnYdeb_bNDBKASWGywTRa0Ne9hMAkal3AuVZJgovI,5
85
+ lucid/nn/_kernel/activation.py,sha256=mfe48Aw3_Hv0hZEVC7DxDw19XK9XSLfdCOvo2JcZz_o,5662
86
+ lucid/nn/_kernel/attention.py,sha256=1k0gboLObMNVow2v3TwliXC_2v8uKf2o8jHYFuyQqcg,3699
87
+ lucid/nn/_kernel/conv.py,sha256=TiY3EkUAmwFCI1aA8YVMoZJHIRrqmJAXZEPh1C7lons,16412
88
+ lucid/nn/_kernel/embedding.py,sha256=uf_G0aKphxBEOtfR9DHXmSyqkDCwc6tJEBNMKt4CNOU,2390
89
+ lucid/nn/_kernel/loss.py,sha256=UD0B5DZ3R98OPZUigHsctL0eAJch2rKQpn1uaI3fzGg,13935
90
+ lucid/nn/_kernel/norm.py,sha256=261WtixerLxFISIroQw8l_zZ3X0b4c_eDy8QHHA-i4M,11992
91
+ lucid/nn/_kernel/pool.py,sha256=IQh5hfKU4PUvnGS1ayorUmytB_vCSxcbAwBYlFKw0iI,10697
92
+ lucid/nn/functional/__init__.py,sha256=NDxjFCqXJ0SZ9ehuK8VbNDPdObegx_YflCIHN6eo1L8,13943
93
+ lucid/nn/functional/_activation.py,sha256=tLkFqAD2HRkuZqLu1qXRhN0EZtkXgeitt-VXD0ztqx4,1266
94
+ lucid/nn/functional/_attention.py,sha256=B4-Ock4_yYds0WVpRHlJnBR8kw9sYCyVFWNIdX25wwA,1212
95
+ lucid/nn/functional/_conv.py,sha256=Vx8K_eGa-yNxqOrudvyuLgPRYeT003UzNv8eCiLZQhM,5555
89
96
  lucid/nn/functional/_drop.py,sha256=99zcj-06BGHaAPEFHeXJWlfxa-jinZrKc5pteXYtxL0,2351
90
97
  lucid/nn/functional/_linear.py,sha256=0KPs14tdjTqJDhLaHTQp_OAOpDP0i-Pd4kJes2BTR9I,663
91
- lucid/nn/functional/_loss.py,sha256=H_IB08O-7XTBXVZwLgsgNA32zmUspOS0Hl5TqOkjlRk,3871
92
- lucid/nn/functional/_norm.py,sha256=vjPfSh0vRSE-nR3-CJPSm66ZYQycNd8mxm5Oz2DLwKw,5961
93
- lucid/nn/functional/_pool.py,sha256=ftzRSFCZB3LRQwN5HkNJSUyZJonYQhfOH4lwKa0cR9Y,4027
98
+ lucid/nn/functional/_loss.py,sha256=b6KT8SrKe5lgAqlAmQnT00Hk7tvd-UcBPNryGYtTPWQ,3834
99
+ lucid/nn/functional/_norm.py,sha256=yunKJttd3WTxXvzKuugL2LgHLmp-9dMxhHgQ9myLUzA,5041
100
+ lucid/nn/functional/_pool.py,sha256=u6ykwqTZ38b9QPwUqFXpnPhOx2cc_9x9AfH0k26Y9pQ,4085
94
101
  lucid/nn/functional/_spatial.py,sha256=lazoSvVMFcauBWRbMOqmkgixA5bDes6scGHVWCgVmHE,3911
95
- lucid/nn/functional/_util.py,sha256=oaMbR76XuFrFtEjLCUEQBPgfFObP98WGnkGQLtFz2uk,4949
102
+ lucid/nn/functional/_util.py,sha256=I2MvzuqPqZBC7Xo_rOq5d1R-f1Hqf7CtTKE06nudY60,5060
96
103
  lucid/nn/init/__init__.py,sha256=YFi-HD2TEglweJ-gyX3n4UVZYzd70gcUi1dBu6hnOAY,1533
97
- lucid/nn/init/_dist.py,sha256=ju3nayB2Mo2-VfngONn51ABnOsVxH-Vfnu_n-NkWFA4,2437
104
+ lucid/nn/init/_dist.py,sha256=Tj9SKl43ZrJdv99X5qXUowdcts4f4D3tUk7RBmX5uCg,2462
98
105
  lucid/nn/modules/__init__.py,sha256=mol5Gfy-3ab5hBYZRxX0vjiI0w5VyKtBxVwj_vrOAZs,285
99
106
  lucid/nn/modules/activation.py,sha256=CpiKpzgZHoCp8UO5taCJ9BuwFz5mYUs0o1_TQcEwQbQ,2823
100
107
  lucid/nn/modules/attention.py,sha256=pZi7IGsNFu2xCmeLMuyWgveMyi2QXtaKRKQ70yAeE0c,4407
@@ -127,8 +134,8 @@ lucid/visual/__init__.py,sha256=6TuFDfmXTwpLyHl7_KqBfdzW6zqHjGzIFvymjFPlvjI,21
127
134
  lucid/visual/graph.py,sha256=YjpIDM_lloZARw3sCBiXPl_hT5A2gTk2fEHvwvJWXTk,4599
128
135
  lucid/weights/__init__.py,sha256=z1AikA3rOEeckWGkYWlcZkxNlJo9Xwa39PL6ly3hWnc,8801
129
136
  lucid/weights/__init__.pyi,sha256=lFonYC3cUx2Idolf3AEPnjFcyqcn3UDU84oJlZafqLY,3013
130
- lucid_dl-2.11.0.dist-info/licenses/LICENSE,sha256=vxRFYnVD1IeYtsvw-KmoElfqrjxKHv1h9YTvsG54loQ,1065
131
- lucid_dl-2.11.0.dist-info/METADATA,sha256=_wOx1Pjq_HgSvzL_4eMHGMsHz8cOwpvU9EpiFhYglco,12159
132
- lucid_dl-2.11.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
133
- lucid_dl-2.11.0.dist-info/top_level.txt,sha256=uzP_qBx9iNWIHKJRlElYcBLYVqMpdm9Q1Ma63QPYbFc,6
134
- lucid_dl-2.11.0.dist-info/RECORD,,
137
+ lucid_dl-2.11.2.dist-info/licenses/LICENSE,sha256=vxRFYnVD1IeYtsvw-KmoElfqrjxKHv1h9YTvsG54loQ,1065
138
+ lucid_dl-2.11.2.dist-info/METADATA,sha256=udbwTB1UUVhJNWAWTGG_aqKNovOu-Qb_iLTi_HVb13I,12312
139
+ lucid_dl-2.11.2.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
140
+ lucid_dl-2.11.2.dist-info/top_level.txt,sha256=uzP_qBx9iNWIHKJRlElYcBLYVqMpdm9Q1Ma63QPYbFc,6
141
+ lucid_dl-2.11.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5