tico 0.1.0.dev250609__py3-none-any.whl → 0.1.0.dev250611__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.
Files changed (38) hide show
  1. tico/__init__.py +1 -1
  2. tico/passes/cast_aten_where_arg_type.py +65 -62
  3. tico/passes/cast_mixed_type_args.py +2 -5
  4. tico/passes/convert_conv1d_to_conv2d.py +3 -4
  5. tico/passes/convert_repeat_to_expand_copy.py +5 -9
  6. tico/passes/decompose_addmm.py +41 -48
  7. tico/passes/decompose_batch_norm.py +97 -99
  8. tico/passes/decompose_fake_quantize.py +4 -6
  9. tico/passes/decompose_fake_quantize_tensor_qparams.py +4 -4
  10. tico/passes/decompose_group_norm.py +8 -7
  11. tico/passes/decompose_grouped_conv2d.py +2 -3
  12. tico/passes/decompose_slice_scatter.py +2 -4
  13. tico/passes/extract_dtype_kwargs.py +2 -1
  14. tico/passes/fuse_leading_unsqueeze_reshape.py +107 -0
  15. tico/passes/fuse_redundant_reshape_to_mean.py +3 -5
  16. tico/passes/legalize_causal_mask_value.py +2 -7
  17. tico/passes/legalize_predefined_layout_operators.py +2 -3
  18. tico/passes/lower_pow2_to_mul.py +5 -7
  19. tico/passes/lower_to_resize_nearest_neighbor.py +6 -10
  20. tico/passes/lower_to_slice.py +3 -9
  21. tico/passes/merge_consecutive_cat.py +2 -4
  22. tico/passes/remove_nop.py +2 -3
  23. tico/passes/remove_redundant_assert_nodes.py +2 -1
  24. tico/passes/remove_redundant_expand.py +5 -9
  25. tico/passes/remove_redundant_permute.py +6 -5
  26. tico/passes/remove_redundant_reshape.py +17 -34
  27. tico/passes/remove_redundant_slice.py +2 -4
  28. tico/passes/remove_redundant_to_copy.py +2 -4
  29. tico/passes/segment_index_select.py +2 -4
  30. tico/serialize/operators/op_where.py +2 -2
  31. tico/utils/convert.py +2 -0
  32. tico/utils/utils.py +26 -0
  33. {tico-0.1.0.dev250609.dist-info → tico-0.1.0.dev250611.dist-info}/METADATA +1 -1
  34. {tico-0.1.0.dev250609.dist-info → tico-0.1.0.dev250611.dist-info}/RECORD +38 -37
  35. {tico-0.1.0.dev250609.dist-info → tico-0.1.0.dev250611.dist-info}/LICENSE +0 -0
  36. {tico-0.1.0.dev250609.dist-info → tico-0.1.0.dev250611.dist-info}/WHEEL +0 -0
  37. {tico-0.1.0.dev250609.dist-info → tico-0.1.0.dev250611.dist-info}/entry_points.txt +0 -0
  38. {tico-0.1.0.dev250609.dist-info → tico-0.1.0.dev250611.dist-info}/top_level.txt +0 -0
@@ -52,12 +52,12 @@ class WhereVisitor(NodeVisitor):
52
52
 
53
53
  result_true_dtype = (
54
54
  extract_torch_dtype(input)
55
- if isinstance(input, torch.fx.node.Node)
55
+ if isinstance(input, torch.fx.Node)
56
56
  else input.dtype # type: ignore[union-attr]
57
57
  )
58
58
  result_false_dtype = (
59
59
  extract_torch_dtype(other)
60
- if isinstance(other, torch.fx.node.Node)
60
+ if isinstance(other, torch.fx.Node)
61
61
  else other.dtype # type: ignore[union-attr]
62
62
  )
63
63
 
tico/utils/convert.py CHANGED
@@ -51,6 +51,7 @@ from tico.passes.decompose_grouped_conv2d import DecomposeGroupedConv2d
51
51
  from tico.passes.decompose_slice_scatter import DecomposeSliceScatter
52
52
  from tico.passes.extract_dtype_kwargs import ExtractDtypeKwargsPass
53
53
  from tico.passes.fill_meta_val import FillMetaVal
54
+ from tico.passes.fuse_leading_unsqueeze_reshape import FuseLeadingUnsqueezeReshape
54
55
  from tico.passes.fuse_redundant_reshape_to_mean import FuseRedundantReshapeToMean
55
56
  from tico.passes.legalize_causal_mask_value import LegalizeCausalMaskValue
56
57
  from tico.passes.legalize_predefined_layout_operators import (
@@ -225,6 +226,7 @@ def convert_exported_module_to_circle(
225
226
  LowerPow2ToMul(),
226
227
  ConvertConv1dToConv2d(),
227
228
  *LowerToSlicePasses(),
229
+ FuseLeadingUnsqueezeReshape(),
228
230
  ]
229
231
  )
230
232
  circle_legalize.run(exported_program)
tico/utils/utils.py CHANGED
@@ -331,6 +331,7 @@ def get_quant_dtype(qmin: int, qmax: int):
331
331
  """
332
332
  known_ranges = {
333
333
  (-32768, 32767): "int16",
334
+ (-32767, 32767): "int16",
334
335
  (0, 65535): "uint16",
335
336
  (-128, 127): "int8",
336
337
  (0, 255): "uint8",
@@ -378,3 +379,28 @@ def broadcastable(
378
379
  if dim_a != 1 and dim_b != 1 and dim_a != dim_b:
379
380
  return False
380
381
  return True
382
+
383
+
384
+ def is_target_node(
385
+ node: torch.fx.Node, target_ops: list[torch._ops.OpOverload] | torch._ops.OpOverload
386
+ ):
387
+ """
388
+ Check whether a given node is a `call_function` node that matches one of the specified targets.
389
+
390
+ Args:
391
+ node (torch.fx.Node): The node to check.
392
+ target_ops (Iterable[Callable]): A list or set of target operations to match (e.g., ops.aten.reshape).
393
+
394
+ Returns:
395
+ bool: True if the node is a call_function, its target is in `target_ops`.
396
+ """
397
+ if not isinstance(target_ops, list):
398
+ target_ops = [target_ops]
399
+ assert all(isinstance(t, torch._ops.OpOverload) for t in target_ops), target_ops
400
+
401
+ if node.op != "call_function":
402
+ return False
403
+ if node.target not in target_ops:
404
+ return False
405
+
406
+ return True
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tico
3
- Version: 0.1.0.dev250609
3
+ Version: 0.1.0.dev250611
4
4
  Summary: Convert exported Torch module to circle
5
5
  Home-page: UNKNOWN
6
6
  License: UNKNOWN
@@ -1,4 +1,4 @@
1
- tico/__init__.py,sha256=mEQHwb4j_KQrsDMO6gp2USb5RCYNhd0MOxL4P_EGMW8,1743
1
+ tico/__init__.py,sha256=Hdcii4nD2OeaUn6hqhQF4rmXIBkKre9mFUyuvzdYsW4,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
@@ -59,39 +59,40 @@ tico/interpreter/__init__.py,sha256=IO6FP_xYbGy0dW0HL26GXD3ouxARaxCK7bz9dn4blPQ,
59
59
  tico/interpreter/infer.py,sha256=vJ3b69ce9HrxNT0gFwbEhHpAyvVyuiunTgAeiqn5t64,4350
60
60
  tico/interpreter/interpreter.py,sha256=tGbluCbrehTCqBu8mtGDNzby_ieJ2ry8_RH_eC0CQxk,3828
61
61
  tico/passes/__init__.py,sha256=IO6FP_xYbGy0dW0HL26GXD3ouxARaxCK7bz9dn4blPQ,26
62
- tico/passes/cast_aten_where_arg_type.py,sha256=UI1lzoKUzrsXJLhRDx8kLYgTgEFU2FyZoNtK54qkPfc,7006
63
- tico/passes/cast_mixed_type_args.py,sha256=WP5Yoj4g4dlyTtCWJDyHh2MJkO06E6A8Jtt6bm2FZXo,7516
62
+ tico/passes/cast_aten_where_arg_type.py,sha256=VDgLcsh3EpxLuGMSgEcLUZe2_iVYVyUf75XK9AQB_qM,7146
63
+ tico/passes/cast_mixed_type_args.py,sha256=khj0m2EIJoqxADUeAAVZl6_T30-hhcIkwDSDZlknblk,7479
64
64
  tico/passes/const_prop_pass.py,sha256=QOeR2u3fo9ZhWXRhfAUW1dTtuWgqgoqdDJoQ516UDbQ,11532
65
- tico/passes/convert_conv1d_to_conv2d.py,sha256=x6NT_opkoySnnFifZz4A2jlbyo8iKHD_2WhAVe0w6xA,5113
65
+ tico/passes/convert_conv1d_to_conv2d.py,sha256=RJVLrY0_Quj90EpUzdlBCepKbqcfArQ3fdnsfYV89YA,5092
66
66
  tico/passes/convert_layout_op_to_reshape.py,sha256=FJUrTbquGTJhK2ig1kBci0DjBjk6hfoajLSrQDlJD8o,2904
67
- tico/passes/convert_repeat_to_expand_copy.py,sha256=fRUETNuFB2p-RLhe844pldm0l5oyViQ6cGfFuAKbYec,3135
67
+ tico/passes/convert_repeat_to_expand_copy.py,sha256=f9Vt2OGFcvUZP0i0qxvh5LfwCpgecr8RkfIrzZMDV0M,3156
68
68
  tico/passes/convert_to_relu6.py,sha256=3sfKfggvjbl9N73pLOwgUTNyoecODsy367nwoX2S-EE,6404
69
- tico/passes/decompose_addmm.py,sha256=_yNX7wx1Y9HJI5ksUJI-UQLHpoNawbUbF8kcm2zGHw0,4221
70
- tico/passes/decompose_batch_norm.py,sha256=d1V9UOkm_5BV0NGLyuQfz4I9NpO7I3ZrRugt7EXM-XM,7016
71
- tico/passes/decompose_fake_quantize.py,sha256=-OFOf0WSyRQ8ikS8KQm2mWXp-tHQDGWOFu3mn6pFfBs,5370
72
- tico/passes/decompose_fake_quantize_tensor_qparams.py,sha256=R0hLlKdRXnAsOrbXOErfZEkSC7nv8_TdklNlI76TRMo,13988
73
- tico/passes/decompose_group_norm.py,sha256=xn1xnT-2e6BvelRAzX8O7wg9kBWURmPldkRvpfYFXHQ,9407
74
- tico/passes/decompose_grouped_conv2d.py,sha256=KJhH6PX7l9k9T8KBV8JDAvaSfJuUnRo_jtvGF2aM-LA,8277
75
- tico/passes/decompose_slice_scatter.py,sha256=ko9p8v-zY5rOx4aSpWomwSdSWb1lIF32gnU7ik5xgII,5604
76
- tico/passes/extract_dtype_kwargs.py,sha256=hfGJ_GfZULbBmLif2AJkhPHVifhucxBiLoQI862Yejk,4303
69
+ tico/passes/decompose_addmm.py,sha256=4gkRIjWnlP5ODuIoo4cpyJpvIv2YVfJehmTQd_8X2JE,3924
70
+ tico/passes/decompose_batch_norm.py,sha256=y1Ez7BPr5EnbIoc_E3kX_KysT_rFkQnQK1QSzoeZcgY,6691
71
+ tico/passes/decompose_fake_quantize.py,sha256=mOMZAVYDAqclDCCVkbMWWjg2iGBdxURHD7fyyTjV4IU,5316
72
+ tico/passes/decompose_fake_quantize_tensor_qparams.py,sha256=Pul2E3RJ6a6p5lpPY8ac6urINWlFaGZtxJ3sOmagylM,13962
73
+ tico/passes/decompose_group_norm.py,sha256=s3lRFqoUIBbxofacwKHY7-vop8_X1WgjqEZBnv09Tgw,9448
74
+ tico/passes/decompose_grouped_conv2d.py,sha256=hPRK9D9RDjmJ3mv0Wx17zeNW4xXT2jTQDHfOKIGgV60,8260
75
+ tico/passes/decompose_slice_scatter.py,sha256=mnfEt58PAelJdheD0cJ5C66w_3yqSngCsfM-Auy9ADU,5563
76
+ tico/passes/extract_dtype_kwargs.py,sha256=ObpsaFlrTPYQw2hJ7UsC5CocyAtBkT_bMtzkMUqAyKc,4333
77
77
  tico/passes/fill_meta_val.py,sha256=Xbam6Aq90ZfWItZw1dgLIwH_q8RCiU5JodKNqkj-ink,1797
78
- tico/passes/fuse_redundant_reshape_to_mean.py,sha256=SzHLLL2Yfj4k1c2L5i4PVI9EFUilHRfIS6S-hahKFCM,3702
79
- tico/passes/legalize_causal_mask_value.py,sha256=KZc_UPk7CGPXO35JOu6dVrOzRJx-ZpJoVvuzz-GvQek,4080
80
- tico/passes/legalize_predefined_layout_operators.py,sha256=N2TtJInjSTk-E5afnkDXXbo9v4zTM7yzsjna3VoihMw,15895
81
- tico/passes/lower_pow2_to_mul.py,sha256=imx9CoKG4bLyNqv4F-Z203s_P0-0SdRH-y4_Q0PTZVo,2304
82
- tico/passes/lower_to_resize_nearest_neighbor.py,sha256=4bIxPSyNEzznTw8f8D9hMNXbZ0KmMPPPfRvITXonEz0,8881
83
- tico/passes/lower_to_slice.py,sha256=6xK7A2hdqdBdN2XRyt2rFGnqJGcaXxmgndis4kn2q2w,7112
84
- tico/passes/merge_consecutive_cat.py,sha256=u1E-7axmX4yw0TMlFO5jXB0rn3xe5ASmqXcR42c9eNA,2722
78
+ tico/passes/fuse_leading_unsqueeze_reshape.py,sha256=zi_I0xISUooXqa29m5nefnYMCDMDEIAYTwHECwFA82o,4192
79
+ tico/passes/fuse_redundant_reshape_to_mean.py,sha256=2SEZ0TfXsmUkuqUdNtS_mQzLd49su5TsQViCLMGL4f4,3691
80
+ tico/passes/legalize_causal_mask_value.py,sha256=xKdFwwMaSFCSQpSk8xISOAqFpZ1jIhgbBIqf7KTSGuk,4017
81
+ tico/passes/legalize_predefined_layout_operators.py,sha256=4AAqYvwMvtuAQ8mdpTJI6oIgcBL_iSMzB0pmcvJ6i3Y,15887
82
+ tico/passes/lower_pow2_to_mul.py,sha256=gFuVw3xa2WwXUrxMcqH_Y4Vb8vInuUIGjrpAC7ia9ig,2342
83
+ tico/passes/lower_to_resize_nearest_neighbor.py,sha256=Cy90yIrZt58L1Hh7k4-uUfclNBBpNoJaQQwL7a5A8wo,8840
84
+ tico/passes/lower_to_slice.py,sha256=iYDE_xmiIFfURE5ZLfZICEwWRqwPWXLLL4y5Dbc0rb8,7023
85
+ tico/passes/merge_consecutive_cat.py,sha256=BYmiU170DsrHQMj7gMe7U6ZpndrX-S4OpvJweDdspec,2701
85
86
  tico/passes/ops.py,sha256=XzaKC_FpsfJLpnU4JlL9X-HVarWKm8cX0iiRgx9bMOs,2909
86
- tico/passes/remove_nop.py,sha256=5QE3inFsXgzyPT_t7pKeXNqD1LRf6ed_Mp7YMadA6AI,2707
87
- tico/passes/remove_redundant_assert_nodes.py,sha256=3a2xEQ2iPY7Gqg8jZi8G5bfDDrK2kOO1OHCMv_gJGz0,1592
88
- tico/passes/remove_redundant_expand.py,sha256=7st92AbWOl7yzM0Y5seaZJQKMFHqkYpH3qYMOlAU5lk,2234
89
- tico/passes/remove_redundant_permute.py,sha256=PIS-ag1EiSLlXJeRjcZoapbvM_4LyGtLBzunomfkAYE,4236
90
- tico/passes/remove_redundant_reshape.py,sha256=fDTMIrQFoRHYWrgGqEHgIg-azy4Z1Pod-Gfv7Gwplho,17010
91
- tico/passes/remove_redundant_slice.py,sha256=BAfSkA5jDIEhYx4nMnu6cJadQle3YTw5y39ZLiYfJJ8,2109
92
- tico/passes/remove_redundant_to_copy.py,sha256=uTIjAn3Eli_RvXC-QOqxBAkV_whDBkkNhu-mvNKAEhs,3136
87
+ tico/passes/remove_nop.py,sha256=Hf91p_EJAOC6DyWNthash0_UWtEcNc_M7znamQfYQ5Y,2686
88
+ tico/passes/remove_redundant_assert_nodes.py,sha256=IONd3xBy6I8tH6_Y1eN3_eCHH7WTC8soBgjXzOju9cQ,1612
89
+ tico/passes/remove_redundant_expand.py,sha256=5SIqN7eIIcqF68tlrB31n1482jSBSBOgKb1wddLX6lw,2197
90
+ tico/passes/remove_redundant_permute.py,sha256=ovrEpB9x_Pjdfq6N35cDyURjP8ZBlAqgFiitPxTvUlI,4204
91
+ tico/passes/remove_redundant_reshape.py,sha256=AfY_TpcXMdelzgE9RSPwU41SKOYofr3bvsp1q-TBnLw,16402
92
+ tico/passes/remove_redundant_slice.py,sha256=Iv7TbB39fktNb4eq0VdyZnwxL_VsKLJ90diMmaf3kZk,2087
93
+ tico/passes/remove_redundant_to_copy.py,sha256=JMDnca2f9OE58ejdMEoZ1O0l-rGAc5T91BT-dFk7FGk,3114
93
94
  tico/passes/restore_linear.py,sha256=UMMHdLmRGq9bfJx_0L9lL2UQBd51PGNP0WywO8KdrDM,4066
94
- tico/passes/segment_index_select.py,sha256=ifXOIFC12lNwsB-s3k1cJcMHP3UEijPpkMAbwI7lZbQ,5097
95
+ tico/passes/segment_index_select.py,sha256=TmkuXPhagCaj6eo_odxIThCsoB-9r4Kkqzt1ATDukpQ,5075
95
96
  tico/serialize/__init__.py,sha256=IO6FP_xYbGy0dW0HL26GXD3ouxARaxCK7bz9dn4blPQ,26
96
97
  tico/serialize/circle_graph.py,sha256=_u0vFDhPdOhEkucmaEhqILo13NKbjyVemPYFfC5YCZg,11619
97
98
  tico/serialize/circle_mapping.py,sha256=C9C3ORACQOdvBdnt5KRzlT8zao_TvzQklIxH794OhP0,5719
@@ -174,10 +175,10 @@ tico/serialize/operators/op_tanh.py,sha256=rs7FsbQeUQ7Ak8RoQV9ymNGXHXRObojfY_Siq
174
175
  tico/serialize/operators/op_to_copy.py,sha256=a8T0uPMavMO_md1a-4_0dlvDHyZS_xew0qB6xjf69rI,3934
175
176
  tico/serialize/operators/op_unsqueeze.py,sha256=ZHhfVXSWEiwb2VDYX5uhxbGQyzZjKT7CrbBpVGxVHBU,2310
176
177
  tico/serialize/operators/op_view.py,sha256=5EMww-ve17Vm9XPuV03Tn7vJsjpU2J8U4d_FOrlm9_o,2546
177
- tico/serialize/operators/op_where.py,sha256=qZDFKVQ2u8HB0Jjpto_1A4g-jfpEprAbBT3PmIGzdoY,2855
178
+ tico/serialize/operators/op_where.py,sha256=doE81GSwygrPBm3JIfN9w7kKXxeIYKxgk0eoY22QIcg,2845
178
179
  tico/serialize/operators/utils.py,sha256=lXGpEJW1h8U_-gfc6EWjvvSiq3yJ9P-v1v3EMRT_pSk,2954
179
180
  tico/utils/__init__.py,sha256=IO6FP_xYbGy0dW0HL26GXD3ouxARaxCK7bz9dn4blPQ,26
180
- tico/utils/convert.py,sha256=KCllPnvQ8bjEYR1yI72s9aNBp7Py1CzIEEpYSYZcu60,11684
181
+ tico/utils/convert.py,sha256=nbpBJue9_ezb8Dj9L9dWcNeVlZd0soGJu_fvrL6-c5c,11810
181
182
  tico/utils/define.py,sha256=Ypgp7YffM4pgPl4Zh6TmogSn1OxGBMRw_e09qYGflZk,1467
182
183
  tico/utils/diff_graph.py,sha256=_eDGGPDPYQD4b--MXX0DLoVgSt_wLfNPt47UlolLLR4,5272
183
184
  tico/utils/errors.py,sha256=f3csJjgbXG9W1aHhqEcou008Aor19W57X8oT5Hx8w1M,954
@@ -189,15 +190,15 @@ tico/utils/passes.py,sha256=kGmDe__5cPaO6i5EDAoXSVe6yXEoX9hAny4ROb3ZEmQ,2409
189
190
  tico/utils/register_custom_op.py,sha256=iRQvdqlBqrJxq_pNkvJyDIJD_SYtCUl88wwbbuvSwlk,22952
190
191
  tico/utils/serialize.py,sha256=AQXMBOLu-Kg2Rn-qbqsAtHndjZAZIavlKA0QFgJREHM,1420
191
192
  tico/utils/trace_decorators.py,sha256=ddLIiKQfSaQrxgF1kNpwjFTQnXENzeSfcr1kuAW4jGI,3221
192
- tico/utils/utils.py,sha256=7t4U3Bs7SV7y3PCdgE9bEAAAI2u1mzQEUP81oP_XHHU,12334
193
+ tico/utils/utils.py,sha256=fnbZ2RLH6-J-wqb32O4qsR1ce4BJU0wYNrk84QXa6_E,13158
193
194
  tico/utils/validate_args_kwargs.py,sha256=P4aMnr9EhNCtc_AgJPpuezfQbqFfDn0lhJSWqmumLZ8,25054
194
195
  tico/utils/mx/__init__.py,sha256=IO6FP_xYbGy0dW0HL26GXD3ouxARaxCK7bz9dn4blPQ,26
195
196
  tico/utils/mx/elemwise_ops.py,sha256=V6glyAHsVR1joqpsgnNytatCD_ew92xNWZ19UFDoMTA,10281
196
197
  tico/utils/mx/formats.py,sha256=uzNWyu-1onUlwQfX5cZ6fZSUfHMRqorper7_T1k3jfk,3404
197
198
  tico/utils/mx/mx_ops.py,sha256=RcfUTYVi-wilGB2sC35OeARdwDqnixv7dG5iyZ-fQT8,8555
198
- tico-0.1.0.dev250609.dist-info/LICENSE,sha256=kp4JLII7bzRhPb0CPD5XTDZMh22BQ7h3k3B7t8TiSbw,12644
199
- tico-0.1.0.dev250609.dist-info/METADATA,sha256=ZpNUuShOOV1hMrNe84u05IoeX4UZn1fj1_TEU4ZlI1Y,8633
200
- tico-0.1.0.dev250609.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
201
- tico-0.1.0.dev250609.dist-info/entry_points.txt,sha256=kBKYSS_IYrSXmUYevmmepqIVPScq5vF8ulQRu3I_Zf0,59
202
- tico-0.1.0.dev250609.dist-info/top_level.txt,sha256=oqs7UPoNSKZEwqsX8B-KAWdQwfAa7i60pbxW_Jk7P3w,5
203
- tico-0.1.0.dev250609.dist-info/RECORD,,
199
+ tico-0.1.0.dev250611.dist-info/LICENSE,sha256=kp4JLII7bzRhPb0CPD5XTDZMh22BQ7h3k3B7t8TiSbw,12644
200
+ tico-0.1.0.dev250611.dist-info/METADATA,sha256=42yMwo0GJBgXFJZf1DgkbdvPuXnrMTjuMVvUMhekukE,8633
201
+ tico-0.1.0.dev250611.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
202
+ tico-0.1.0.dev250611.dist-info/entry_points.txt,sha256=kBKYSS_IYrSXmUYevmmepqIVPScq5vF8ulQRu3I_Zf0,59
203
+ tico-0.1.0.dev250611.dist-info/top_level.txt,sha256=oqs7UPoNSKZEwqsX8B-KAWdQwfAa7i60pbxW_Jk7P3w,5
204
+ tico-0.1.0.dev250611.dist-info/RECORD,,