tico 0.1.0.dev250805__py3-none-any.whl → 0.1.0.dev250807__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.
tico/__init__.py CHANGED
@@ -29,7 +29,7 @@ __all__ = [
29
29
  ]
30
30
 
31
31
  # THIS LINE IS AUTOMATICALLY GENERATED BY setup.py
32
- __version__ = "0.1.0.dev250805"
32
+ __version__ = "0.1.0.dev250807"
33
33
 
34
34
  MINIMUM_SUPPORTED_VERSION = "2.5.0"
35
35
  SECURE_TORCH_VERSION = "2.6.0"
@@ -17,6 +17,7 @@ import types
17
17
  from typing import Any, Callable, Dict, List, Optional
18
18
 
19
19
  import torch
20
+ from tqdm.auto import tqdm
20
21
 
21
22
  from tico.experimental.quantization.algorithm.gptq.gptq import GPTQ
22
23
  from tico.experimental.quantization.algorithm.gptq.utils import (
@@ -181,7 +182,9 @@ class GPTQQuantizer(BaseQuantizer):
181
182
  target_layers = [model]
182
183
 
183
184
  quantizers: Dict[str, Any] = {}
184
- for l_idx, layer in enumerate(target_layers):
185
+ for l_idx, layer in enumerate(
186
+ tqdm(target_layers, desc="Quantizing layers", unit="layer")
187
+ ):
185
188
  # 1) Identify quantizable submodules within the layer
186
189
  full = find_layers(layer)
187
190
  sequential = [list(full.keys())]
@@ -210,7 +213,12 @@ class GPTQQuantizer(BaseQuantizer):
210
213
 
211
214
  # Run layer forward over all cached batches to build Hessian/statistics
212
215
  batch_num = self.num_batches
213
- for batch_idx in range(batch_num):
216
+ for batch_idx in tqdm(
217
+ range(batch_num),
218
+ desc=f"[L{l_idx}] collecting",
219
+ leave=False,
220
+ unit="batch",
221
+ ):
214
222
  cache_args_batch = gather_single_batch_from_list(
215
223
  self.cache_args, batch_idx
216
224
  )
@@ -238,7 +246,12 @@ class GPTQQuantizer(BaseQuantizer):
238
246
  gptq[name].free()
239
247
 
240
248
  # 4) After quantization, re-run the layer to produce outputs for the next layer
241
- for batch_idx in range(batch_num):
249
+ for batch_idx in tqdm(
250
+ range(batch_num),
251
+ desc=f"[L{l_idx}] re-forward",
252
+ leave=False,
253
+ unit="batch",
254
+ ):
242
255
  cache_args_batch = gather_single_batch_from_list(
243
256
  self.cache_args, batch_idx
244
257
  )
@@ -114,7 +114,6 @@ def evaluate(
114
114
  input_data: InputDataType = None,
115
115
  *,
116
116
  mode="plot",
117
- metrics: List[str] = ["peir"],
118
117
  custom_metrics: Dict[str, Callable] = dict(),
119
118
  ) -> Optional[Dict[str, Any]]:
120
119
  """
@@ -140,8 +139,6 @@ def evaluate(
140
139
  The mode of operation. Options are:
141
140
  - "plot": Plot the results (default)
142
141
  - "return": Return the results.
143
- metrics
144
- A list of metric names for comparison.
145
142
  custom_metrics
146
143
  A dictionary of metric names and corresponding callable functions for comparison.
147
144
  Example: {'mse': mean_squared_error, 'cosine_similarity': cosine_similarity_fn}
@@ -205,7 +202,7 @@ def evaluate(
205
202
  )
206
203
 
207
204
  # Computes the comparison score based on the provided metrics.
208
- metric_calculator = MetricCalculator(metrics, custom_metrics)
205
+ metric_calculator = MetricCalculator(custom_metrics)
209
206
  results: Dict[str, Any] = metric_calculator.compute(torch_output, circle_output)
210
207
 
211
208
  if mode == "return":
@@ -12,98 +12,135 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- from typing import Any, Callable, Dict, List
15
+ from typing import Any, Callable, Dict, List, Optional
16
16
 
17
17
  import numpy as np
18
18
  import torch
19
19
 
20
20
 
21
- def compute_peir(base: torch.Tensor, target: torch.Tensor):
21
+ def compute_max_abs_diff(base: torch.Tensor, target: torch.Tensor) -> float:
22
22
  """
23
- Calculate the Peak Error to Interval Ratio (PEIR) between two tensors.
24
-
25
- This function computes the PEIR between two tensors using the formula:
26
- PEIR = max(abs(tensor1 - tensor2)) / (max(tensor1) - min(tensor2))
23
+ Return the *maximum* absolute element-wise difference between two tensors.
27
24
  """
28
- assert base.shape == target.shape, f"shape mismatch: {base.shape} != {target.shape}"
29
- base_tensor = base.numpy()
30
- target_tensor = target.numpy()
31
- assert (
32
- base_tensor.dtype == np.float32 and target_tensor.dtype == np.float32
33
- ), f"dtype should be float32: base({base_tensor.dtype}), target({target_tensor.dtype})"
25
+ assert base.shape == target.shape, "shape mismatch"
26
+ return (base.detach() - target.detach()).abs().max().item()
34
27
 
35
- base_tensor = base_tensor.reshape(-1)
36
- target_tensor = target_tensor.reshape(-1)
37
28
 
38
- assert (
39
- base_tensor.shape == target_tensor.shape
40
- ), f"Shape mismatch: {base_tensor.shape} != {target_tensor.shape}"
29
+ def compute_peir(base: torch.Tensor, target: torch.Tensor) -> float:
30
+ """
31
+ Peak-Error-to-Interval Ratio (PEIR).
41
32
 
42
- peak_error = np.max(np.absolute(target_tensor - base_tensor))
43
- interval = np.max(base_tensor) - np.min(base_tensor)
44
- peir = peak_error / interval # pylint: disable=invalid-name
33
+ PEIR = max(|base - target|) / (max(base) - min(base))
45
34
 
46
- min_value = min([base_tensor.min(), target_tensor.min()])
47
- max_value = max([base_tensor.max(), target_tensor.max()])
35
+ The interval denominator uses the reference (*base*) tensor only — this
36
+ makes PEIR independent of quantisation error in `target`.
37
+ """
38
+ assert base.shape == target.shape, "shape mismatch"
39
+ peak_error = (base.detach() - target.detach()).abs().max().item()
40
+ interval = (base.detach().max() - base.detach().min()).item()
41
+ interval = 1.0 if interval == 0.0 else interval # avoid divide-by-zero
42
+ return peak_error / interval
48
43
 
49
- interval = max_value - min_value
50
- interval = 1.0 if interval == 0.0 else interval # Avoid zero interval
51
44
 
52
- return peir
45
+ def mse(base: torch.Tensor, target: torch.Tensor) -> float:
46
+ """
47
+ Mean Squared Error (MSE).
48
+ Penalizes **larger** deviations more heavily than MAE by squaring each
49
+ difference — helpful to expose occasional large spikes.
50
+ Formula
51
+ -------
52
+ MSE = mean((base - target)²)
53
+ Returns
54
+ -------
55
+ float
56
+ Mean squared error. *Lower is better*.
57
+ """
58
+ return torch.mean((base.detach() - target.detach()) ** 2).item()
53
59
 
54
60
 
55
61
  class MetricCalculator:
56
62
  """
57
- Compute metrics including both built-in and custom metrics.
58
-
59
- metrics
60
- A list of metric names for comparison.
61
- custom_metrics
62
- A dictionary of metric names and corresponding callable functions for comparison.
63
- Example: {'mse': mean_squared_error, 'cosine_similarity': cosine_similarity_fn}
63
+ Lightweight registry-and-dispatcher for **pair-wise tensor comparison metrics**.
64
+
65
+ Purpose
66
+ -------
67
+ Consolidate all metrics used to assess the discrepancy between a reference
68
+ (usually FP32) tensor and its quantized counterpart, while letting the caller
69
+ choose *at runtime* which subset to evaluate.
70
+
71
+ Built-in metrics
72
+ ----------------
73
+ Key Description
74
+ -------------------- -------------------------------------------------
75
+ "diff" / "max_abs_diff" Maximum absolute element-wise difference
76
+ "peir" Peak-Error-to-Interval Ratio
77
+
78
+ Usage pattern
79
+ -------------
80
+ >>> calc = MetricCalculator(custom_metrics={'mse': mse_fn})
81
+ >>> stats = calc.compute(fp_outs, q_outs, metrics=['diff', 'mse'])
82
+
83
+ • **Instantiation** registers any extra user metrics
84
+ (signature: ``fn(base: Tensor, target: Tensor) -> float``).
85
+ • **compute(...)** takes two *equal-length* lists of tensors and an optional
86
+ list of metric names.
87
+ — If *metrics* is *None*, every registered metric is evaluated.
88
+ — Returns a dict: ``{metric_name -> [value for each tensor pair]}``.
89
+
90
+ Implementation notes
91
+ --------------------
92
+ * All tensors are detached before calculation to avoid autograd overhead.
93
+ * Registrations are stored in `self.registry` (str → callable).
94
+ * Duplicate metric names between built-ins and custom metrics raise an error
95
+ at construction time to prevent silent shadowing.
64
96
  """
65
97
 
66
- builtin_metrics = {
98
+ builtin_metrics: Dict[str, Callable[[torch.Tensor, torch.Tensor], float]] = {
99
+ "diff": compute_max_abs_diff,
100
+ "max_abs_diff": compute_max_abs_diff,
67
101
  "peir": compute_peir,
102
+ "mse": mse,
68
103
  }
69
104
 
70
105
  def __init__(
71
106
  self,
72
- metrics: List[str] = list(),
73
- custom_metrics: Dict[str, Callable] = dict(),
107
+ custom_metrics: Optional[
108
+ Dict[str, Callable[[torch.Tensor, torch.Tensor], float]]
109
+ ] = None,
74
110
  ):
75
- self.metrics: Dict[str, Callable] = dict()
76
-
77
- for m in metrics:
78
- if m in self.builtin_metrics:
79
- self.metrics[m] = self.builtin_metrics[m]
80
- else:
81
- raise RuntimeError(f"Invalid metric: {m}")
82
-
83
- duplicates = set(self.metrics).intersection(custom_metrics.keys())
84
- if len(duplicates) != 0:
85
- raise RuntimeError(f"There are duplicate metrics: {duplicates}")
86
-
87
- self.metrics = self.metrics | custom_metrics
88
-
111
+ self.registry: Dict[str, Callable] = self.builtin_metrics.copy()
112
+ if custom_metrics:
113
+ dup = self.registry.keys() & custom_metrics.keys()
114
+ if dup:
115
+ raise RuntimeError(f"Duplicate metric names: {dup}")
116
+ assert custom_metrics is not None
117
+ self.registry.update(custom_metrics) # type: ignore[arg-type]
118
+
119
+ # ----------------------------------------------------------------- #
120
+ # Public API #
121
+ # ----------------------------------------------------------------- #
89
122
  def compute(
90
- self, output1: List[torch.Tensor], output2: List[torch.Tensor]
123
+ self,
124
+ base_outputs: List[torch.Tensor],
125
+ target_outputs: List[torch.Tensor],
126
+ metrics: Optional[List[str]] = None,
91
127
  ) -> Dict[str, List[Any]]:
92
128
  """
93
- Compute both built-in metrics (if provided) and custom metrics.
129
+ Compute selected metrics for every (base, target) pair.
94
130
 
95
- Returns
96
- --------
97
- Dict[str, Any]
98
- A dictionary with metric names and their computed values.
131
+ Parameters
132
+ ----------
133
+ metrics
134
+ List of metric names to evaluate **this call**.
135
+ • None → evaluate *all* registered metrics.
99
136
  """
100
- results: Dict[str, List[Any]] = dict()
101
-
102
- # Compute built-in metrics
103
- if self.metrics is not None:
104
- for m in self.metrics:
105
- results[m] = list()
106
- for out1, out2 in zip(output1, output2):
107
- results[m].append(self.builtin_metrics[m](out1, out2))
108
-
137
+ sel = metrics or list(self.registry)
138
+ unknown = set(sel) - self.registry.keys()
139
+ if unknown:
140
+ raise RuntimeError(f"Unknown metric(s): {unknown}")
141
+
142
+ results: Dict[str, List[Any]] = {m: [] for m in sel}
143
+ for base, tgt in zip(base_outputs, target_outputs):
144
+ for m in sel:
145
+ results[m].append(self.registry[m](base, tgt))
109
146
  return results
@@ -0,0 +1,13 @@
1
+ """
2
+ Public PTQ API — re-export the most common symbols.
3
+ """
4
+
5
+ from tico.experimental.quantization.ptq.dtypes import DType
6
+ from tico.experimental.quantization.ptq.mode import Mode
7
+ from tico.experimental.quantization.ptq.qscheme import QScheme
8
+
9
+ __all__ = [
10
+ "DType",
11
+ "Mode",
12
+ "QScheme",
13
+ ]
@@ -0,0 +1,70 @@
1
+ # Copyright (c) 2025 Samsung Electronics Co., Ltd. All Rights Reserved
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from dataclasses import dataclass
16
+
17
+
18
+ @dataclass(frozen=True)
19
+ class DType:
20
+ """
21
+ Self-contained integer dtypes for quantization.
22
+
23
+ A DType is just an immutable value-object with two fields:
24
+ - bits
25
+ - signed
26
+
27
+ Common presets (INT8, UINT4, ..) are provided as constants for convenience.
28
+ """
29
+
30
+ bits: int # pylint: disable=used-before-assignment
31
+ signed: bool = False # False -> unsigned
32
+
33
+ @property
34
+ def qmin(self) -> int:
35
+ assert self.bits is not None
36
+ if self.signed:
37
+ return -(1 << (self.bits - 1))
38
+ return 0
39
+
40
+ @property
41
+ def qmax(self) -> int:
42
+ assert self.bits is not None
43
+ if self.signed:
44
+ return (1 << (self.bits - 1)) - 1
45
+ return (1 << self.bits) - 1
46
+
47
+ def __str__(self) -> str:
48
+ prefix = "int" if self.signed else "uint"
49
+ return f"{prefix}{self.bits}"
50
+
51
+ # ────────────────────────────────
52
+ # Factory helpers
53
+ # ────────────────────────────────
54
+ @staticmethod
55
+ def int(bits: int): # type: ignore[valid-type]
56
+ return DType(bits, signed=True)
57
+
58
+ @staticmethod
59
+ def uint(bits: int): # type: ignore[valid-type]
60
+ return DType(bits, signed=False)
61
+
62
+
63
+ # ---------------------------------------------------------------------
64
+ # Convenient canned versions
65
+ # ---------------------------------------------------------------------
66
+ UINT4 = DType.uint(4)
67
+ INT4 = DType.int(4)
68
+ INT8 = DType.int(8)
69
+ UINT8 = DType.uint(8)
70
+ INT16 = DType.int(16)
@@ -0,0 +1,32 @@
1
+ # Copyright (c) 2025 Samsung Electronics Co., Ltd. All Rights Reserved
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from enum import auto, Enum
16
+
17
+
18
+ class Mode(Enum):
19
+ """
20
+ Mode — global FSM for PTQWrapper & Handlers.
21
+
22
+ • NO_QUANT : pure pass-through (no stats, no fake-quant)
23
+ • CALIB : collect observer statistics only
24
+ • QUANT : use cached (scale, zero-point) → fake-quant enabled
25
+ """
26
+
27
+ NO_QUANT = auto()
28
+ CALIB = auto()
29
+ QUANT = auto()
30
+
31
+ def __str__(self) -> str:
32
+ return self.name.lower()
@@ -0,0 +1,40 @@
1
+ # Copyright (c) 2025 Samsung Electronics Co., Ltd. All Rights Reserved
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from enum import auto, Enum
16
+
17
+
18
+ class QScheme(Enum):
19
+ # ───── Per-tensor ────────────
20
+ PER_TENSOR_ASYMM = auto()
21
+ PER_TENSOR_SYMM = auto()
22
+ # ───── Per-channel ───────────
23
+ PER_CHANNEL_ASYMM = auto()
24
+ PER_CHANNEL_SYMM = auto()
25
+
26
+ # helper
27
+ def is_per_channel(self) -> bool:
28
+ return self in {
29
+ QScheme.PER_CHANNEL_ASYMM,
30
+ QScheme.PER_CHANNEL_SYMM,
31
+ }
32
+
33
+ def is_symmetric(self) -> bool:
34
+ return self in {
35
+ QScheme.PER_TENSOR_SYMM,
36
+ QScheme.PER_CHANNEL_SYMM,
37
+ }
38
+
39
+ def __str__(self) -> str:
40
+ return self.name.lower()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tico
3
- Version: 0.1.0.dev250805
3
+ Version: 0.1.0.dev250807
4
4
  Summary: Convert exported Torch module to circle
5
5
  Home-page: UNKNOWN
6
6
  License: UNKNOWN
@@ -13,6 +13,7 @@ Requires-Dist: circle-schema
13
13
  Requires-Dist: packaging
14
14
  Requires-Dist: pyyaml
15
15
  Requires-Dist: torch
16
+ Requires-Dist: tqdm
16
17
 
17
18
  # TICO
18
19
 
@@ -1,4 +1,4 @@
1
- tico/__init__.py,sha256=xuyRHiRb0Ws9DndXxHXTm2LL5jqatnKIbWDMk0WegDQ,1883
1
+ tico/__init__.py,sha256=xXynWlns6HYdl6Zf9xwJtdTnFkscm8b49vqhn8FYJZg,1883
2
2
  tico/pt2_to_circle.py,sha256=gu3MD4Iqc0zMZcCZ2IT8oGbyj21CTSbT3Rgd9s2B_9A,2767
3
3
  tico/config/__init__.py,sha256=xZzCXjZ84qE-CsBi-dfaL05bqpQ3stKKfTXhnrJRyVs,142
4
4
  tico/config/base.py,sha256=q5xMqGxTUZs4mFqt5c7i_y9U00fYgdMGl9nUqIVMlCo,1248
@@ -13,7 +13,7 @@ tico/experimental/quantization/algorithm/__init__.py,sha256=IO6FP_xYbGy0dW0HL26G
13
13
  tico/experimental/quantization/algorithm/gptq/__init__.py,sha256=IO6FP_xYbGy0dW0HL26GXD3ouxARaxCK7bz9dn4blPQ,26
14
14
  tico/experimental/quantization/algorithm/gptq/gptq.py,sha256=Qn9b_2ki7B64DcVEY25NMkww3PdZ5EqYQQXfYhNDQ6I,5555
15
15
  tico/experimental/quantization/algorithm/gptq/quant.py,sha256=Rl4wAOCmlE0U09BtNCDbccaSNohRHCNLwFi3zCqZfNo,5127
16
- tico/experimental/quantization/algorithm/gptq/quantizer.py,sha256=KiaNcDkufbYPHdkkOGw9nAwLtk0yYwUDbyzFT3xRLOs,11066
16
+ tico/experimental/quantization/algorithm/gptq/quantizer.py,sha256=5Sai9gD__6mt7rrUJutJ2L-BV_2biUXcvZC1H-a16Vc,11467
17
17
  tico/experimental/quantization/algorithm/gptq/utils.py,sha256=leGKayf-xbSjVwwAGTA5RsxUKrhDiklOQdlsLifjdrs,1811
18
18
  tico/experimental/quantization/algorithm/pt2e/__init__.py,sha256=IO6FP_xYbGy0dW0HL26GXD3ouxARaxCK7bz9dn4blPQ,26
19
19
  tico/experimental/quantization/algorithm/pt2e/quantizer.py,sha256=mdTvsG87bo8fu0GaWqSM8iBCs-4f4EfUlVtk-Ko6M34,2546
@@ -42,8 +42,8 @@ tico/experimental/quantization/algorithm/smoothquant/quantizer.py,sha256=rQMtnqM
42
42
  tico/experimental/quantization/algorithm/smoothquant/smooth_quant.py,sha256=O1h7IojcsJaprFvRM9tsAuR3q7vTjKKRi88jD-nH79Y,6175
43
43
  tico/experimental/quantization/evaluation/__init__.py,sha256=IO6FP_xYbGy0dW0HL26GXD3ouxARaxCK7bz9dn4blPQ,26
44
44
  tico/experimental/quantization/evaluation/backend.py,sha256=CZL9rZOA0t8cH7PHp6u9l7dGqWNvTj9bKOvwo0PVul0,692
45
- tico/experimental/quantization/evaluation/evaluate.py,sha256=cI9_4cbJKeYMmDt_PD85MHEseHGhwYRr3RHsKdix1FI,7988
46
- tico/experimental/quantization/evaluation/metric.py,sha256=Ae-vAkA8n6T9_aGv47rkz1MLCw9ji1oDm1Rdd_MIxNQ,3744
45
+ tico/experimental/quantization/evaluation/evaluate.py,sha256=kfa_GvFaX6DoSTAmuCImMJqF2jgqtnor5UpC7wVmGPI,7877
46
+ tico/experimental/quantization/evaluation/metric.py,sha256=t9M058dOQ8iy_2PcrbNMAebBNJs8TU8USZw_nbi2iWI,5488
47
47
  tico/experimental/quantization/evaluation/utils.py,sha256=82RG_e5LuKfWo786wEZUVwXY93nNl901n04fB7D0Z6k,5909
48
48
  tico/experimental/quantization/evaluation/executor/__init__.py,sha256=IO6FP_xYbGy0dW0HL26GXD3ouxARaxCK7bz9dn4blPQ,26
49
49
  tico/experimental/quantization/evaluation/executor/backend_executor.py,sha256=3kLu3_rcsreA_NK42yRgRgubPtZmVp7QCRvaqLNw10E,1522
@@ -56,6 +56,10 @@ tico/experimental/quantization/passes/propagate_qparam_backward.py,sha256=TGtyW0
56
56
  tico/experimental/quantization/passes/propagate_qparam_forward.py,sha256=RhUHGCR2RpBO5KYkQ7Z8U5u7HEwDq2wdKHLKAJCi-5c,5138
57
57
  tico/experimental/quantization/passes/quantize_bias.py,sha256=T7YxJ70N0tSK0FF9VJZA5iP0sHdnnsX9GX4AT4JDFSk,4325
58
58
  tico/experimental/quantization/passes/remove_weight_dequant_op.py,sha256=gI1MtrHazWpdNfys7f1ngTTWplzluF7SA-uX0HMR5Mc,6592
59
+ tico/experimental/quantization/ptq/__init__.py,sha256=ZoPdEwZ1i1n5pBFChx8GuUrkfRP2vsSoLPNILQjNBaA,298
60
+ tico/experimental/quantization/ptq/dtypes.py,sha256=xfCBtq6mQmUYRwsoFgII6gvRl1raQi0Inj9pznDuKwQ,2236
61
+ tico/experimental/quantization/ptq/mode.py,sha256=lT-T8vIv8YWcwrjT7xXVhOw1g7aoAdh_3PWB-ptPKaI,1052
62
+ tico/experimental/quantization/ptq/qscheme.py,sha256=uwhv7bCxOOXB3I-IKlRyr_u4eXOq48uIqGy4TLDqGxY,1301
59
63
  tico/interpreter/__init__.py,sha256=IO6FP_xYbGy0dW0HL26GXD3ouxARaxCK7bz9dn4blPQ,26
60
64
  tico/interpreter/infer.py,sha256=1ZFe3DVMR2mlwBosoedqoL0-CGN_01CKLgMgxuw62KA,4861
61
65
  tico/interpreter/interpreter.py,sha256=tGbluCbrehTCqBu8mtGDNzby_ieJ2ry8_RH_eC0CQxk,3828
@@ -206,9 +210,9 @@ tico/utils/mx/__init__.py,sha256=IO6FP_xYbGy0dW0HL26GXD3ouxARaxCK7bz9dn4blPQ,26
206
210
  tico/utils/mx/elemwise_ops.py,sha256=V6glyAHsVR1joqpsgnNytatCD_ew92xNWZ19UFDoMTA,10281
207
211
  tico/utils/mx/formats.py,sha256=uzNWyu-1onUlwQfX5cZ6fZSUfHMRqorper7_T1k3jfk,3404
208
212
  tico/utils/mx/mx_ops.py,sha256=RcfUTYVi-wilGB2sC35OeARdwDqnixv7dG5iyZ-fQT8,8555
209
- tico-0.1.0.dev250805.dist-info/LICENSE,sha256=kp4JLII7bzRhPb0CPD5XTDZMh22BQ7h3k3B7t8TiSbw,12644
210
- tico-0.1.0.dev250805.dist-info/METADATA,sha256=zZJaVgP4R1iwsYoWXZi7za9_q6pPGoN5IL7ybesoB38,8430
211
- tico-0.1.0.dev250805.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
212
- tico-0.1.0.dev250805.dist-info/entry_points.txt,sha256=kBKYSS_IYrSXmUYevmmepqIVPScq5vF8ulQRu3I_Zf0,59
213
- tico-0.1.0.dev250805.dist-info/top_level.txt,sha256=oqs7UPoNSKZEwqsX8B-KAWdQwfAa7i60pbxW_Jk7P3w,5
214
- tico-0.1.0.dev250805.dist-info/RECORD,,
213
+ tico-0.1.0.dev250807.dist-info/LICENSE,sha256=kp4JLII7bzRhPb0CPD5XTDZMh22BQ7h3k3B7t8TiSbw,12644
214
+ tico-0.1.0.dev250807.dist-info/METADATA,sha256=ATnzGR44gSRsXtSTjRBwY0DOQK512GtszXrNo3r3rD4,8450
215
+ tico-0.1.0.dev250807.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
216
+ tico-0.1.0.dev250807.dist-info/entry_points.txt,sha256=kBKYSS_IYrSXmUYevmmepqIVPScq5vF8ulQRu3I_Zf0,59
217
+ tico-0.1.0.dev250807.dist-info/top_level.txt,sha256=oqs7UPoNSKZEwqsX8B-KAWdQwfAa7i60pbxW_Jk7P3w,5
218
+ tico-0.1.0.dev250807.dist-info/RECORD,,