tico 0.1.0.dev250616__py3-none-any.whl → 0.1.0.dev250618__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 +1 -1
- tico/experimental/quantization/passes/insert_quantize_on_dtype_mismatch.py +6 -2
- tico/experimental/quantization/passes/quantize_bias.py +123 -0
- tico/experimental/quantization/passes/remove_weight_dequant_op.py +3 -0
- tico/passes/cast_aten_where_arg_type.py +4 -1
- tico/passes/cast_mixed_type_args.py +4 -1
- tico/passes/convert_conv1d_to_conv2d.py +12 -4
- tico/passes/convert_layout_op_to_reshape.py +3 -2
- tico/passes/convert_repeat_to_expand_copy.py +5 -2
- tico/passes/convert_to_relu6.py +4 -3
- tico/passes/decompose_addmm.py +11 -7
- tico/passes/decompose_batch_norm.py +7 -11
- tico/passes/decompose_fake_quantize.py +12 -6
- tico/passes/decompose_fake_quantize_tensor_qparams.py +12 -6
- tico/passes/decompose_group_norm.py +50 -21
- tico/passes/decompose_grouped_conv2d.py +15 -7
- tico/passes/decompose_slice_scatter.py +9 -5
- tico/passes/fuse_leading_unsqueeze_reshape.py +8 -3
- tico/passes/legalize_predefined_layout_operators.py +33 -25
- tico/passes/lower_pow2_to_mul.py +3 -1
- tico/passes/lower_to_resize_nearest_neighbor.py +21 -10
- tico/passes/lower_to_slice.py +21 -11
- tico/passes/remove_redundant_permute.py +5 -3
- tico/passes/remove_redundant_reshape.py +5 -2
- tico/passes/remove_redundant_to_copy.py +4 -0
- tico/passes/restore_linear.py +7 -5
- tico/passes/segment_index_select.py +9 -5
- tico/utils/convert.py +2 -0
- tico/utils/graph.py +48 -2
- {tico-0.1.0.dev250616.dist-info → tico-0.1.0.dev250618.dist-info}/METADATA +1 -1
- {tico-0.1.0.dev250616.dist-info → tico-0.1.0.dev250618.dist-info}/RECORD +35 -34
- {tico-0.1.0.dev250616.dist-info → tico-0.1.0.dev250618.dist-info}/LICENSE +0 -0
- {tico-0.1.0.dev250616.dist-info → tico-0.1.0.dev250618.dist-info}/WHEEL +0 -0
- {tico-0.1.0.dev250616.dist-info → tico-0.1.0.dev250618.dist-info}/entry_points.txt +0 -0
- {tico-0.1.0.dev250616.dist-info → tico-0.1.0.dev250618.dist-info}/top_level.txt +0 -0
@@ -31,7 +31,7 @@ from torch.export import ExportedProgram
|
|
31
31
|
from tico.passes import ops
|
32
32
|
from tico.serialize.circle_graph import extract_shape
|
33
33
|
from tico.utils import logging
|
34
|
-
from tico.utils.graph import add_placeholder, is_single_value_tensor
|
34
|
+
from tico.utils.graph import add_placeholder, create_node, is_single_value_tensor
|
35
35
|
from tico.utils.passes import PassBase, PassResult
|
36
36
|
from tico.utils.trace_decorators import trace_const_diff_on_pass
|
37
37
|
from tico.utils.utils import is_target_node
|
@@ -116,18 +116,22 @@ class SegmentIndexSelectConst(PassBase):
|
|
116
116
|
exported_program, torch.tensor([i]), prefix="segm_index"
|
117
117
|
)
|
118
118
|
with graph.inserting_before(node):
|
119
|
-
index_select_node =
|
119
|
+
index_select_node = create_node(
|
120
|
+
graph,
|
120
121
|
torch.ops.aten.index_select.default,
|
121
122
|
args=(input, dim, index_node),
|
123
|
+
origin=node,
|
122
124
|
)
|
123
125
|
index_select_node_list.append(index_select_node)
|
124
126
|
|
125
127
|
with graph.inserting_before(node):
|
126
|
-
concat_node =
|
127
|
-
|
128
|
+
concat_node = create_node(
|
129
|
+
graph,
|
130
|
+
torch.ops.aten.cat.default,
|
131
|
+
args=(index_select_node_list, dim),
|
128
132
|
)
|
129
133
|
|
130
|
-
node.replace_all_uses_with(concat_node, propagate_meta=
|
134
|
+
node.replace_all_uses_with(concat_node, propagate_meta=True)
|
131
135
|
|
132
136
|
modified = True
|
133
137
|
logger.debug(
|
tico/utils/convert.py
CHANGED
@@ -30,6 +30,7 @@ from tico.experimental.quantization.passes.propagate_qparam_backward import (
|
|
30
30
|
from tico.experimental.quantization.passes.propagate_qparam_forward import (
|
31
31
|
PropagateQParamForward,
|
32
32
|
)
|
33
|
+
from tico.experimental.quantization.passes.quantize_bias import QuantizeBias
|
33
34
|
from tico.experimental.quantization.passes.remove_weight_dequant_op import (
|
34
35
|
RemoveWeightDequantOp,
|
35
36
|
)
|
@@ -250,6 +251,7 @@ def convert_exported_module_to_circle(
|
|
250
251
|
RemoveWeightDequantOp(),
|
251
252
|
PropagateQParamForward(),
|
252
253
|
PropagateQParamBackward(),
|
254
|
+
QuantizeBias(),
|
253
255
|
InsertQuantizeOnDtypeMismatch(),
|
254
256
|
]
|
255
257
|
)
|
tico/utils/graph.py
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
# See the License for the specific language governing permissions and
|
17
17
|
# limitations under the License.
|
18
18
|
|
19
|
-
from typing import Optional, TYPE_CHECKING
|
19
|
+
from typing import Any, Dict, Optional, Tuple, TYPE_CHECKING
|
20
20
|
|
21
21
|
if TYPE_CHECKING:
|
22
22
|
import torch.fx
|
@@ -24,7 +24,7 @@ import torch
|
|
24
24
|
from torch.export import ExportedProgram
|
25
25
|
from torch.export.exported_program import InputKind, InputSpec, TensorArgument
|
26
26
|
|
27
|
-
from tico.utils.utils import get_fake_mode
|
27
|
+
from tico.utils.utils import get_fake_mode, set_new_meta_val
|
28
28
|
|
29
29
|
|
30
30
|
def is_torch_param(node: torch.fx.Node, ep: ExportedProgram):
|
@@ -234,3 +234,49 @@ def get_module_name_chain(node: Optional[torch.fx.Node]) -> str:
|
|
234
234
|
return next(reversed(stack.values()))[1]
|
235
235
|
else:
|
236
236
|
return "unknown"
|
237
|
+
|
238
|
+
|
239
|
+
def create_node(
|
240
|
+
graph: torch.fx.Graph,
|
241
|
+
target: torch._ops.OpOverload,
|
242
|
+
args: Optional[Tuple[Any, ...]] = None,
|
243
|
+
kwargs: Optional[Dict[str, Any]] = None,
|
244
|
+
*,
|
245
|
+
origin: Optional[torch.fx.Node] = None,
|
246
|
+
) -> torch.fx.Node:
|
247
|
+
"""
|
248
|
+
Insert a new node into graph and propagate metadata from *origin*.
|
249
|
+
|
250
|
+
Parameters
|
251
|
+
----------
|
252
|
+
graph : torch.fx.Graph
|
253
|
+
The graph that will own the newly-created node.
|
254
|
+
|
255
|
+
target : torch._ops.OpOverload
|
256
|
+
The op to call (e.g. `torch.add` or "call_function" target).
|
257
|
+
|
258
|
+
args : Tuple[Any, ...], optional
|
259
|
+
Positional arguments for the new node.
|
260
|
+
|
261
|
+
kwargs : Dict[str, Any], optional
|
262
|
+
Keyword arguments for the new node.
|
263
|
+
|
264
|
+
origin : torch.fx.Node, optional
|
265
|
+
If given, every key in `origin.meta` **except** "val" is copied
|
266
|
+
onto the new node. "val" is recomputed from *args* /*kwargs* using
|
267
|
+
the internal meta-inference helper.
|
268
|
+
|
269
|
+
Returns
|
270
|
+
-------
|
271
|
+
torch.fx.Node
|
272
|
+
The freshly inserted node with fully-populated `.meta`.
|
273
|
+
"""
|
274
|
+
new_node = graph.call_function(target, args=args, kwargs=kwargs)
|
275
|
+
if origin:
|
276
|
+
assert isinstance(origin, torch.fx.Node), type(origin)
|
277
|
+
# Propagate "nn_module_stack" to retain the originating module context
|
278
|
+
# for meaningful node names.
|
279
|
+
if "nn_module_stack" in origin.meta:
|
280
|
+
new_node.meta["nn_module_stack"] = origin.meta["nn_module_stack"]
|
281
|
+
|
282
|
+
return new_node
|
@@ -1,4 +1,4 @@
|
|
1
|
-
tico/__init__.py,sha256=
|
1
|
+
tico/__init__.py,sha256=RrIXtcajfToey4BPf7DPtQpe9D5Ds438M8cEHimbNC8,1743
|
2
2
|
tico/pt2_to_circle.py,sha256=PPmFNw20jw2Z2VyM3ln9pX__jTzBOAZiv0gT5a-p-Y8,2666
|
3
3
|
tico/config/__init__.py,sha256=xZzCXjZ84qE-CsBi-dfaL05bqpQ3stKKfTXhnrJRyVs,142
|
4
4
|
tico/config/base.py,sha256=anwOiJFkUxUi7Cef573JgQcjk6S-FSi6O_TLjYASW-g,1244
|
@@ -51,48 +51,49 @@ tico/experimental/quantization/evaluation/executor/circle_executor.py,sha256=eCC
|
|
51
51
|
tico/experimental/quantization/evaluation/executor/triv24_executor.py,sha256=sUoXl6oOO2arAKaNjOBg7HiQja145_Jv6qgY7XtR7A8,5159
|
52
52
|
tico/experimental/quantization/passes/__init__.py,sha256=IO6FP_xYbGy0dW0HL26GXD3ouxARaxCK7bz9dn4blPQ,26
|
53
53
|
tico/experimental/quantization/passes/fold_quant_ops.py,sha256=OYUndHaSL3GiL8koIG9_pqavW-hghrs0kkpvounsh1g,3312
|
54
|
-
tico/experimental/quantization/passes/insert_quantize_on_dtype_mismatch.py,sha256=
|
54
|
+
tico/experimental/quantization/passes/insert_quantize_on_dtype_mismatch.py,sha256=AbNcI7rfIwHsQna_rFuwqFdOzFAU2lIB3sMK-vns8Dc,13072
|
55
55
|
tico/experimental/quantization/passes/propagate_qparam_backward.py,sha256=TGtyW0Z2qOTgVIasBdGRgbwH31YYd6ek7OvLTmCV614,3118
|
56
56
|
tico/experimental/quantization/passes/propagate_qparam_forward.py,sha256=RhUHGCR2RpBO5KYkQ7Z8U5u7HEwDq2wdKHLKAJCi-5c,5138
|
57
|
-
tico/experimental/quantization/passes/
|
57
|
+
tico/experimental/quantization/passes/quantize_bias.py,sha256=ZQ3rETYStpW28JUbODRixbq5sDEOiIOB_qWA-Jzuu-Y,4337
|
58
|
+
tico/experimental/quantization/passes/remove_weight_dequant_op.py,sha256=Klc_9-94tl0_AuAToKOjsWED_YPk5RB67eum0ddPX7o,6588
|
58
59
|
tico/interpreter/__init__.py,sha256=IO6FP_xYbGy0dW0HL26GXD3ouxARaxCK7bz9dn4blPQ,26
|
59
60
|
tico/interpreter/infer.py,sha256=vJ3b69ce9HrxNT0gFwbEhHpAyvVyuiunTgAeiqn5t64,4350
|
60
61
|
tico/interpreter/interpreter.py,sha256=tGbluCbrehTCqBu8mtGDNzby_ieJ2ry8_RH_eC0CQxk,3828
|
61
62
|
tico/passes/__init__.py,sha256=IO6FP_xYbGy0dW0HL26GXD3ouxARaxCK7bz9dn4blPQ,26
|
62
|
-
tico/passes/cast_aten_where_arg_type.py,sha256=
|
63
|
-
tico/passes/cast_mixed_type_args.py,sha256=
|
63
|
+
tico/passes/cast_aten_where_arg_type.py,sha256=ybtGj1L7_2zGyfb_G-_y1N1mRgKHVq6fBZc-9-fH9sA,7229
|
64
|
+
tico/passes/cast_mixed_type_args.py,sha256=s1lAwYvJdYdkE11fK2n1faybPyA5CJtZkOkU46rhXXA,7590
|
64
65
|
tico/passes/const_prop_pass.py,sha256=QOeR2u3fo9ZhWXRhfAUW1dTtuWgqgoqdDJoQ516UDbQ,11532
|
65
|
-
tico/passes/convert_conv1d_to_conv2d.py,sha256=
|
66
|
-
tico/passes/convert_layout_op_to_reshape.py,sha256=
|
67
|
-
tico/passes/convert_repeat_to_expand_copy.py,sha256=
|
68
|
-
tico/passes/convert_to_relu6.py,sha256=
|
69
|
-
tico/passes/decompose_addmm.py,sha256=
|
70
|
-
tico/passes/decompose_batch_norm.py,sha256=
|
71
|
-
tico/passes/decompose_fake_quantize.py,sha256=
|
72
|
-
tico/passes/decompose_fake_quantize_tensor_qparams.py,sha256=
|
73
|
-
tico/passes/decompose_group_norm.py,sha256=
|
74
|
-
tico/passes/decompose_grouped_conv2d.py,sha256=
|
75
|
-
tico/passes/decompose_slice_scatter.py,sha256=
|
66
|
+
tico/passes/convert_conv1d_to_conv2d.py,sha256=2AAs8q9BYuvMr0F1Mrua1rpGvwxOVIE10c798P5sFf8,5231
|
67
|
+
tico/passes/convert_layout_op_to_reshape.py,sha256=sCAFjkmVtiKjvDQSAgnjNBHl3_hWXJZElGDXQiTH-7s,2963
|
68
|
+
tico/passes/convert_repeat_to_expand_copy.py,sha256=JbtFTmWyfJS2SSd_higP1IEhQeh7wHdN5dmTbbiFVCs,3237
|
69
|
+
tico/passes/convert_to_relu6.py,sha256=1BJpUwUb6Zli_1y3eyJQo7dg9B1xvZ7sYjMbvEQsFJM,6442
|
70
|
+
tico/passes/decompose_addmm.py,sha256=0IUZjRS8G-h7LPeYu27gxWyTKi3pKAF1uNU1y-mHLL0,4056
|
71
|
+
tico/passes/decompose_batch_norm.py,sha256=hWR6PMqgzMuNME7oLiNaxDJl5ZwXZeqxSkcNEMW4vAE,6514
|
72
|
+
tico/passes/decompose_fake_quantize.py,sha256=Y29HncMwgRffwmzl5-iua8MhWLd9zEAUWqlNhGhmoHg,5368
|
73
|
+
tico/passes/decompose_fake_quantize_tensor_qparams.py,sha256=lHFp42OZpQS5bZ5o2GLZX10RozCl7JoOMGgkoC55j10,14006
|
74
|
+
tico/passes/decompose_group_norm.py,sha256=rtjv3PrcFTtZ68uCsmE2LibnWaQU-e8NdKkblL4LqxE,10197
|
75
|
+
tico/passes/decompose_grouped_conv2d.py,sha256=n2qv320akL1ju33ucZ6lU1cKEAaj0NI8YZ5CrUnkRLM,8512
|
76
|
+
tico/passes/decompose_slice_scatter.py,sha256=xqMHKhW2595YoAeubKZ4jRhYW4TQ09EXPgLNgODqXG8,5653
|
76
77
|
tico/passes/extract_dtype_kwargs.py,sha256=ObpsaFlrTPYQw2hJ7UsC5CocyAtBkT_bMtzkMUqAyKc,4333
|
77
78
|
tico/passes/fill_meta_val.py,sha256=Xbam6Aq90ZfWItZw1dgLIwH_q8RCiU5JodKNqkj-ink,1797
|
78
|
-
tico/passes/fuse_leading_unsqueeze_reshape.py,sha256=
|
79
|
+
tico/passes/fuse_leading_unsqueeze_reshape.py,sha256=88jwTP35yRyXOk9xdO6YW2OEfdKAws3KFRT16WQz0RI,4291
|
79
80
|
tico/passes/fuse_redundant_reshape_to_mean.py,sha256=2SEZ0TfXsmUkuqUdNtS_mQzLd49su5TsQViCLMGL4f4,3691
|
80
81
|
tico/passes/legalize_causal_mask_value.py,sha256=xKdFwwMaSFCSQpSk8xISOAqFpZ1jIhgbBIqf7KTSGuk,4017
|
81
|
-
tico/passes/legalize_predefined_layout_operators.py,sha256=
|
82
|
-
tico/passes/lower_pow2_to_mul.py,sha256=
|
83
|
-
tico/passes/lower_to_resize_nearest_neighbor.py,sha256=
|
84
|
-
tico/passes/lower_to_slice.py,sha256=
|
82
|
+
tico/passes/legalize_predefined_layout_operators.py,sha256=oUwog9TGHT86MMy-T_ymTh5pQN0srSefiAA6CNiWVgA,15826
|
83
|
+
tico/passes/lower_pow2_to_mul.py,sha256=nfJXa9ZTZMiLg6ownSyvkM4KF2z9tZW34Q3CCWI_vmQ,2402
|
84
|
+
tico/passes/lower_to_resize_nearest_neighbor.py,sha256=N6F56Of8Aiv-KIiYLHnh33WX72W60ZVQSBEYWHdYqNQ,9005
|
85
|
+
tico/passes/lower_to_slice.py,sha256=0qAX3WzZdyMFDW4DiO9b5JFXd4rL1-0doBT6lJvaw_I,7260
|
85
86
|
tico/passes/merge_consecutive_cat.py,sha256=BYmiU170DsrHQMj7gMe7U6ZpndrX-S4OpvJweDdspec,2701
|
86
87
|
tico/passes/ops.py,sha256=XzaKC_FpsfJLpnU4JlL9X-HVarWKm8cX0iiRgx9bMOs,2909
|
87
88
|
tico/passes/remove_nop.py,sha256=Hf91p_EJAOC6DyWNthash0_UWtEcNc_M7znamQfYQ5Y,2686
|
88
89
|
tico/passes/remove_redundant_assert_nodes.py,sha256=IONd3xBy6I8tH6_Y1eN3_eCHH7WTC8soBgjXzOju9cQ,1612
|
89
90
|
tico/passes/remove_redundant_expand.py,sha256=5SIqN7eIIcqF68tlrB31n1482jSBSBOgKb1wddLX6lw,2197
|
90
|
-
tico/passes/remove_redundant_permute.py,sha256=
|
91
|
-
tico/passes/remove_redundant_reshape.py,sha256=
|
91
|
+
tico/passes/remove_redundant_permute.py,sha256=98UsaZzFZdQzEEAR1pIzRisAf6hgfXLa88aayjalt3E,4292
|
92
|
+
tico/passes/remove_redundant_reshape.py,sha256=inp5fMNXM675Rj29wmHn5xoPmOqbiDkgMmmsqguCeMk,16308
|
92
93
|
tico/passes/remove_redundant_slice.py,sha256=Iv7TbB39fktNb4eq0VdyZnwxL_VsKLJ90diMmaf3kZk,2087
|
93
|
-
tico/passes/remove_redundant_to_copy.py,sha256=
|
94
|
-
tico/passes/restore_linear.py,sha256=
|
95
|
-
tico/passes/segment_index_select.py,sha256=
|
94
|
+
tico/passes/remove_redundant_to_copy.py,sha256=tKy4XKkO2l33fMxVPQ_iFkUeFvP15kbPvzPPhT_g0c8,3292
|
95
|
+
tico/passes/restore_linear.py,sha256=xGJdNb-1CrkOKS9BnLbcblkZc6P2vVjKIi-7lRcs7Bk,4111
|
96
|
+
tico/passes/segment_index_select.py,sha256=jn0M2sdUcDyjrvxfvM40wt5644iPQMY_ud0uvptXN84,5187
|
96
97
|
tico/serialize/__init__.py,sha256=IO6FP_xYbGy0dW0HL26GXD3ouxARaxCK7bz9dn4blPQ,26
|
97
98
|
tico/serialize/circle_graph.py,sha256=_u0vFDhPdOhEkucmaEhqILo13NKbjyVemPYFfC5YCZg,11619
|
98
99
|
tico/serialize/circle_mapping.py,sha256=C9C3ORACQOdvBdnt5KRzlT8zao_TvzQklIxH794OhP0,5719
|
@@ -178,11 +179,11 @@ tico/serialize/operators/op_view.py,sha256=5EMww-ve17Vm9XPuV03Tn7vJsjpU2J8U4d_FO
|
|
178
179
|
tico/serialize/operators/op_where.py,sha256=doE81GSwygrPBm3JIfN9w7kKXxeIYKxgk0eoY22QIcg,2845
|
179
180
|
tico/serialize/operators/utils.py,sha256=lXGpEJW1h8U_-gfc6EWjvvSiq3yJ9P-v1v3EMRT_pSk,2954
|
180
181
|
tico/utils/__init__.py,sha256=IO6FP_xYbGy0dW0HL26GXD3ouxARaxCK7bz9dn4blPQ,26
|
181
|
-
tico/utils/convert.py,sha256=
|
182
|
+
tico/utils/convert.py,sha256=gh_EcWwjZZ5IyQKtazfiZ1_FvAMXe0leu5nPN-0OcHg,11919
|
182
183
|
tico/utils/define.py,sha256=Ypgp7YffM4pgPl4Zh6TmogSn1OxGBMRw_e09qYGflZk,1467
|
183
184
|
tico/utils/diff_graph.py,sha256=_eDGGPDPYQD4b--MXX0DLoVgSt_wLfNPt47UlolLLR4,5272
|
184
185
|
tico/utils/errors.py,sha256=f3csJjgbXG9W1aHhqEcou008Aor19W57X8oT5Hx8w1M,954
|
185
|
-
tico/utils/graph.py,sha256=
|
186
|
+
tico/utils/graph.py,sha256=Y6aODsnc_-9l61oanknb7K1jqJ8B35iPypOKkM0Qkk0,9149
|
186
187
|
tico/utils/logging.py,sha256=IlbBWscsaHidI0dNqro1HEXAbIcbkR3BD5ukLy2m95k,1286
|
187
188
|
tico/utils/model.py,sha256=Uqc92AnJXQ2pbvctS2z2F3Ku3yNrwXZ9O33hZVis7is,1250
|
188
189
|
tico/utils/padding.py,sha256=GGO27VbaOvtaMYLDrSaKv7uxjeet566aMJD0PyYeMvQ,1484
|
@@ -196,9 +197,9 @@ tico/utils/mx/__init__.py,sha256=IO6FP_xYbGy0dW0HL26GXD3ouxARaxCK7bz9dn4blPQ,26
|
|
196
197
|
tico/utils/mx/elemwise_ops.py,sha256=V6glyAHsVR1joqpsgnNytatCD_ew92xNWZ19UFDoMTA,10281
|
197
198
|
tico/utils/mx/formats.py,sha256=uzNWyu-1onUlwQfX5cZ6fZSUfHMRqorper7_T1k3jfk,3404
|
198
199
|
tico/utils/mx/mx_ops.py,sha256=RcfUTYVi-wilGB2sC35OeARdwDqnixv7dG5iyZ-fQT8,8555
|
199
|
-
tico-0.1.0.
|
200
|
-
tico-0.1.0.
|
201
|
-
tico-0.1.0.
|
202
|
-
tico-0.1.0.
|
203
|
-
tico-0.1.0.
|
204
|
-
tico-0.1.0.
|
200
|
+
tico-0.1.0.dev250618.dist-info/LICENSE,sha256=kp4JLII7bzRhPb0CPD5XTDZMh22BQ7h3k3B7t8TiSbw,12644
|
201
|
+
tico-0.1.0.dev250618.dist-info/METADATA,sha256=3mRIOovwnOiIsT7YPmmjWd_UPnZYKk08Kz-rvj5E7gE,8846
|
202
|
+
tico-0.1.0.dev250618.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
203
|
+
tico-0.1.0.dev250618.dist-info/entry_points.txt,sha256=kBKYSS_IYrSXmUYevmmepqIVPScq5vF8ulQRu3I_Zf0,59
|
204
|
+
tico-0.1.0.dev250618.dist-info/top_level.txt,sha256=oqs7UPoNSKZEwqsX8B-KAWdQwfAa7i60pbxW_Jk7P3w,5
|
205
|
+
tico-0.1.0.dev250618.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|