xmos-ai-tools 1.2.1.dev24__py3-none-macosx_11_0_arm64.whl → 1.3.0__py3-none-macosx_11_0_arm64.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.
@@ -109,50 +109,6 @@ typedef struct padding_sizes_t {
109
109
  int32_t right;
110
110
  } padding_sizes_t;
111
111
 
112
- /**
113
- * @brief Execute @oper{pad_prepare} function.
114
- *
115
- * `plan` points to the output vector @tensor{y} with length @math{N}.
116
- *
117
- * `p` struct describing the padding to be applied to the input tensor.
118
- *
119
- * `x` parameters describing the input tensor to be padded.
120
- *
121
- * `bytes_per_pixel` the bytes per pixel for tensor x.
122
- *
123
- * @param plan [out] The output vector @tensor{y}
124
- * @param p [in] The input vector @tensor{x}
125
- * @param x [in] Look-up table @tensor{T}
126
- * @param bytes_per_pixel [in] Length @math{N} of input and output vectors
127
- */
128
- C_API void pad_prepare(nn_pad_plan_t *plan, const padding_sizes_t *p,
129
- const nn_image_params_t *x,
130
- const unsigned bytes_per_pixel);
131
-
132
- /**
133
- * @brief Execute @oper{pad_run} job.
134
- *
135
- * See @oper_ref{pad_run} for more details about the @oper{requantize_16_to_8}
136
- * operator.
137
- *
138
- * `Y` points to the output vector @tensor{y}.
139
- *
140
- * `X` points to the input vector @tensor{x}.
141
- *
142
- * `plan` points to the (initialized) plan.
143
- *
144
- * @requires_word_alignment{Y,X}
145
- *
146
- * @param y [out] The output vector @tensor{y}
147
- * @param x [in] The input vector @tensor{x}
148
- * @param plan [in] The prameters describing how to pad.
149
- */
150
- void pad_run(char *y, char *x, const nn_pad_plan_t *p, uint32_t pad_value);
151
-
152
- void pad_ref(char *y, char *x, const padding_sizes_t *p,
153
- const nn_image_params_t *xp, const unsigned bytes_per_pixel,
154
- uint32_t pad_value);
155
-
156
112
  /**
157
113
  * Func to calculate n_3
158
114
  */
@@ -336,12 +292,7 @@ void softmax_generate_exp_lut(int zero_point, float scale, float *lut);
336
292
  void softmax_ref(int8_t *Y, const int8_t *X, const float zero_point,
337
293
  const float scale, const int length);
338
294
 
339
- void slice_memcpy(int8_t *dst, int8_t *src, int32_t *in_offsets,
340
- int32_t *out_offsets, int32_t *begin, int32_t *end,
341
- void (*memcpy_func)(void *, void *, size_t));
295
+ void softmax_single(int8_t *Y, const int8_t *X, const float *lut,
296
+ const int offset);
342
297
 
343
- void slice_memcpy_get_params(int *begin_dst, int *end_dst, int *in_offsets,
344
- int *out_offsets, int *shape_dst, const int *begin,
345
- const int *size, const int *shape,
346
- const int dtype_size, const int rank);
347
298
  #endif // LAYERS_H_
@@ -0,0 +1,15 @@
1
+ #ifndef _vpu_memmove_word_aligned_h_
2
+ #define _vpu_memmove_word_aligned_h_
3
+
4
+ /**
5
+ * Function that copies a block of memory. Both source and destination
6
+ * address must be word aligned. Any number of bytes can be copied. There
7
+ * may be an overlap between the destination and source.
8
+ *
9
+ * @param dst Destination address, must be word aligned.
10
+ * @param src Source address, must be word aligned.
11
+ * @param byte_count Number of bytes to copy - may be zero
12
+ */
13
+ void vpu_memmove_word_aligned(void * dst, const void * src, unsigned int byte_count);
14
+
15
+ #endif
@@ -0,0 +1,53 @@
1
+ #ifndef _vpu_memset_256_h_
2
+ #define _vpu_memset_256_h_
3
+
4
+ /**
5
+ * Function that replicates a vector. The source address must be word
6
+ * aligned, the destination address is assumed to be aligned with the
7
+ * replication pattern in the source. Any number of bytes can be copied.
8
+ * There should not be an overlap between the destination and source.
9
+ *
10
+ * It is assumed that the source address contains 32 replicated bytes (if
11
+ * the destination address is byte aligned), or that it contains 16
12
+ * replicated shorts (if the destination address is 16-bit aligned), or
13
+ * that it contains 8 replicated ints.
14
+ *
15
+ * broadcast_32_to_256() and BROADCAST_8_TO_32() cane be used to
16
+ * create the source vector
17
+ *
18
+ * @param dst Destination address
19
+ * @param src Source address, must be word aligned.
20
+ * @param byte_count Number of bytes to copy - may be zero
21
+ */
22
+ void vpu_memset_256(void *dst, const void *src, unsigned int byte_count);
23
+
24
+ /**
25
+ * Function that replicates an int over a vector. The vector must be
26
+ * aligned on an 8-byte boundary. In order to replicate a byte or short over
27
+ * a vector, combine this with a call to BROADCAST_8_TO_32() or
28
+ * BROADCAST_16_TO_32(). Declare the vector as a uint64_t x[] in order to
29
+ * guarantee 8-byte alignement.
30
+ *
31
+ * @param dst Destination address, must be 8-byte aligned
32
+ * @param from Value to be replicated
33
+ */
34
+ void broadcast_32_to_256(void *dst, uint32_t from);
35
+
36
+ /**
37
+ * Macro that replicates a byte over an int.
38
+ * Use with broadcast_32_to_256() in order to replicate a byte over a vector
39
+ */
40
+ #define BROADCAST_8_TO_32(f) (((uint8_t)f) * 0x01010101)
41
+
42
+ /**
43
+ * Macro that replicates a short over an int
44
+ * Use with broadcast_32_to_256() in order to replicate a short over a vector
45
+ */
46
+ #define BROADCAST_16_TO_32(f) (((uint16_t)f) * 0x00010001)
47
+
48
+ /**
49
+ * Macro that replicates a byte over a short
50
+ */
51
+ #define BROADCAST_8_TO_16(f) (((uint8_t)f) * 0x00000101)
52
+
53
+ #endif
@@ -175,17 +175,17 @@ void inference_engine_unload_model(inference_engine_t *UNSAFE ie);
175
175
  * \param ie pointer to inference engine.
176
176
  * \param model_bytes Number of bytes in the model
177
177
  * \param model_data Pointer to the model (one of data_model or
178
- * data_tensor_arena passed above) \param c_flash Optional channel to flash
179
- * server, to be used for fetching parameter blocks
178
+ * data_tensor_arena passed above) \param c_flash_or_tile Optional channel to flash
179
+ * or tile server
180
180
  *
181
181
  * \returns non zero indicates an error
182
182
  */
183
183
  #ifdef __XC__
184
- int inference_engine_load_model(inference_engine_t * UNSAFE ie, uint32_t model_bytes, uint32_t * UNSAFE model_data, chanend ?c_flash);
184
+ int inference_engine_load_model(inference_engine_t * UNSAFE ie, uint32_t model_bytes, uint32_t * UNSAFE model_data, chanend ?c_flash_or_tile);
185
185
  #else
186
186
  int inference_engine_load_model(inference_engine_t *UNSAFE ie,
187
187
  uint32_t model_bytes,
188
- uint32_t *UNSAFE model_data, void *flash_data);
188
+ uint32_t *UNSAFE model_data, void *weights_data_ptr);
189
189
  #endif
190
190
 
191
191
  /** Function that invokes the inference engine. This function will create an
@@ -11,7 +11,7 @@ struct xc_context_config_t {
11
11
  // calculated in the compiler.
12
12
  int model_thread_count;
13
13
  thread_info_t thread_info;
14
- void *UNSAFE flash_data; // channel to flash reader.
14
+ void *UNSAFE weights_data_ptr; // DDR ptr or channel to flash/tile server.
15
15
  };
16
16
 
17
17
  #endif // XCORE_CONFIG_H_
@@ -21,12 +21,14 @@ constexpr const char *XC_unaryi16_OpCode = "XC_unaryi16";
21
21
  constexpr const char *XC_conv2d_v2_OpCode = "XC_conv2d_v2";
22
22
  constexpr const char *XC_maxpool2d_OpCode = "XC_maxpool2d";
23
23
  constexpr const char *XC_softmax_OpCode = "XC_softmax";
24
- constexpr const char *XC_ld_flash_OpCode = "XC_ld_flash";
24
+ constexpr const char *XC_batched_softmax_OpCode = "XC_batched_softmax";
25
+ constexpr const char *XC_ld_weights_OpCode = "XC_ld_weights";
25
26
  constexpr const char *XC_add_OpCode = "XC_add";
26
27
  constexpr const char *XC_slice_OpCode = "XC_slice";
28
+ constexpr const char *XC_broadcast_OpCode = "XC_broadcast";
27
29
  constexpr const char *XC_lookup_OpCode = "XC_lookup";
28
30
  constexpr const char *XC_pad_OpCode = "XC_pad";
29
- constexpr const char *XC_pad_v2_OpCode = "XC_pad_v2";
31
+ constexpr const char *XC_concat_OpCode = "XC_concat";
30
32
  constexpr const char *XC_pad_3_to_4_OpCode = "XC_pad_3_to_4";
31
33
  constexpr const char *XC_mul_OpCode = "XC_mul";
32
34
  // Binarized ops
@@ -44,12 +46,14 @@ TFLMRegistration *Register_XC_unaryi16();
44
46
  TFLMRegistration *Register_XC_conv2d_v2();
45
47
  TFLMRegistration *Register_XC_maxpool2d();
46
48
  TFLMRegistration *Register_XC_softmax();
47
- TFLMRegistration *Register_XC_ld_flash();
49
+ TFLMRegistration *Register_XC_batched_softmax();
50
+ TFLMRegistration *Register_XC_ld_weights();
48
51
  TFLMRegistration *Register_XC_add();
49
52
  TFLMRegistration *Register_XC_slice();
53
+ TFLMRegistration *Register_XC_broadcast();
50
54
  TFLMRegistration *Register_XC_lookup();
51
55
  TFLMRegistration *Register_XC_pad();
52
- TFLMRegistration *Register_XC_pad_v2();
56
+ TFLMRegistration *Register_XC_concat();
53
57
  TFLMRegistration *Register_XC_pad_3_to_4();
54
58
  TFLMRegistration *Register_XC_mul();
55
59
  // Binarized ops
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xmos-ai-tools
3
- Version: 1.2.1.dev24
3
+ Version: 1.3.0
4
4
  Summary: XMOS AI Tools
5
5
  Home-page: https://github.com/xmos/ai_tools
6
6
  Author: XMOS
@@ -31,5 +31,5 @@ Requires-Dist: tflite >=2.4.0
31
31
  Documentation
32
32
  -------------
33
33
 
34
- Click [here](https://github.com/xmos/ai_tools/blob/28b6228b76e38a2fc78c9741d323d656083dca6f/README.md) for documentation on using xmos-ai-tools to deploy AI models on xcore.
34
+ Click [here](https://github.com/xmos/ai_tools/blob/de1c819d1109e67ed90a11d3334e851fe97f1361/README.md) for documentation on using xmos-ai-tools to deploy AI models on xcore.
35
35
 
@@ -49,7 +49,7 @@ xmos_ai_tools/runtime/include/lib_nn/api/nn_bin_types.h,sha256=DTFX2ecfzwl-_tHlq
49
49
  xmos_ai_tools/runtime/include/lib_nn/api/nn_config.h,sha256=KFoA5zyOTTHi6x-qDuIWkF8wAz4Gc4BdOBgUzOArOD0,11558
50
50
  xmos_ai_tools/runtime/include/lib_nn/api/nn_conv2d_structs.h,sha256=Kfyq3bD1aLcSnWTB_cijU_D5ThGol5utJ1k-WsjqeMY,2268
51
51
  xmos_ai_tools/runtime/include/lib_nn/api/nn_image.h,sha256=gz7NyxmZACZiDED0wT7px2qjEEMcUwfa5TjeOUmYzL4,514
52
- xmos_ai_tools/runtime/include/lib_nn/api/nn_layers.h,sha256=JZx4pkwoJrvU3YtNPvoDZLnOHf01ci7-QfNqViQp0W4,12140
52
+ xmos_ai_tools/runtime/include/lib_nn/api/nn_layers.h,sha256=NJXmlCSXA5UzK0dvJhNADqmrAvmNzvp0kbn9NLQyU_Q,10257
53
53
  xmos_ai_tools/runtime/include/lib_nn/api/nn_op_helper.h,sha256=VMnBVEcgH0wtiiV91JjtFRG4xkCI0m7WrikEmU6ulss,3716
54
54
  xmos_ai_tools/runtime/include/lib_nn/api/nn_op_utils.h,sha256=iTZcsp941d4fT574C_aUsHDAkLAWYxoFM4EjW7ypm94,4741
55
55
  xmos_ai_tools/runtime/include/lib_nn/api/nn_operator.h,sha256=Nj4jiXVHlnFjVBtV7mCGulTzSyNwCIpitz8Ao9kSIsU,337
@@ -64,16 +64,18 @@ xmos_ai_tools/runtime/include/lib_nn/api/quadratic_interpolation.h,sha256=qNguTb
64
64
  xmos_ai_tools/runtime/include/lib_nn/api/quantize_int16.h,sha256=THKX9qg6ob1Cj4LiRmqlogaEAozc2qEIiENBmRS8rgs,736
65
65
  xmos_ai_tools/runtime/include/lib_nn/api/quantize_int16_transform.h,sha256=Rg2XOvVL1P2UneJ33X9b-ATwaCIiNAyp_ipdAu1SXyk,1029
66
66
  xmos_ai_tools/runtime/include/lib_nn/api/version.h,sha256=P0otpsAVvhiPNpXQu6uJUrjygoOTaHEJlIegIMyj_W4,303
67
+ xmos_ai_tools/runtime/include/lib_nn/api/vpu_memmove_word_aligned.h,sha256=-OgMM0JMG1kIlL6YSiEg-6o6t43t1LUDwAS_inW-r_8,579
68
+ xmos_ai_tools/runtime/include/lib_nn/api/vpu_memset_256.h,sha256=Cb93K-ie4Dp-lqCW0rjzKrIBnEGlKf9xrRPck67sJ1o,1946
67
69
  xmos_ai_tools/runtime/include/lib_nn/api/vpu_sim.h,sha256=3S1_2eSaEj2q8nhFuRiCefQhwTeYpfothuFu0fC54_s,3811
68
70
  xmos_ai_tools/runtime/include/lib_nn/api/xs3_vpu.h,sha256=xuEpNayaSWeEIoL1--EfQAXkr4TidwDASFYgbshJ-Mw,6227
69
71
  xmos_ai_tools/runtime/include/lib_nn/api/xs3a_registers.h,sha256=5i6Tue1VplRI2VlIes-gaD2BXOKreuUit51OYTsbgFs,139774
70
72
  xmos_ai_tools/runtime/include/lib_nn/src/asm/asm_constants.h,sha256=VB8pk_H4vI4S18xYfPFCOGZoLG6S0FYW5uVfG3u9glU,1018
71
73
  xmos_ai_tools/runtime/include/lib_nn/src/asm/window_op_plan.h,sha256=4I5u3jkbPOXQnj073h24346uJTYApf0A2oegNc0TKjc,704
72
74
  xmos_ai_tools/runtime/include/lib_tflite_micro/api/fast_flash.h,sha256=IFDYtVg3AodzlFEQw_MFWs2fNQ43aMEXNVwpaG27sko,1984
73
- xmos_ai_tools/runtime/include/lib_tflite_micro/api/inference_engine.h,sha256=yX_NVE1dsAhQ67uj3Qz5DiY7oSQG6n3RDgjKN16TJPk,9261
75
+ xmos_ai_tools/runtime/include/lib_tflite_micro/api/inference_engine.h,sha256=qSNg6rIzz-dKdIUoxk9VnqyxoypO4Aqf5h06K7rM82k,9249
74
76
  xmos_ai_tools/runtime/include/lib_tflite_micro/api/memory_parallel_transport.h,sha256=P6o4-yWfE3GW_R08zf_kTsg-h4589eAhg9lNvJA7ZCM,1932
75
77
  xmos_ai_tools/runtime/include/lib_tflite_micro/api/version.h,sha256=zwy-Yay7mJg09OQpzKyNfITtjfe0Jy3IgErrPdH31I0,318
76
- xmos_ai_tools/runtime/include/lib_tflite_micro/api/xcore_config.h,sha256=KToE82wnv1DUW72bCeiWGuW3uNsvyu9yURXLjs3OLTM,497
78
+ xmos_ai_tools/runtime/include/lib_tflite_micro/api/xcore_config.h,sha256=6KOImWQXzY6FXIepK746QlkQllmCo3eH5FD3Vp1x7PQ,519
77
79
  xmos_ai_tools/runtime/include/lib_tflite_micro/api/xcore_device_memory.h,sha256=bLWcRDNrzClLh8_eR3XRRz3sA2pEAzzxGLDoPTsNp8A,1917
78
80
  xmos_ai_tools/runtime/include/lib_tflite_micro/api/xcore_shared_config.h,sha256=qv3cxHGUHDxdR0xlfdd0qWDOd4V0vwPkmYEVka_j6xw,1015
79
81
  xmos_ai_tools/runtime/include/lib_tflite_micro/src/thread_call.h,sha256=KNG-3gNWMSonzYTGbk4L0kT8WU9JD0bOzlk8naz7JO0,4965
@@ -82,7 +84,7 @@ xmos_ai_tools/runtime/include/lib_tflite_micro/src/tflite-xcore-kernels/xcore_co
82
84
  xmos_ai_tools/runtime/include/lib_tflite_micro/src/tflite-xcore-kernels/xcore_custom_options.h,sha256=8iD9kjYqpaGpAUfGzfYk7OaPZo1ewpL5bBnZECE6jEg,618
83
85
  xmos_ai_tools/runtime/include/lib_tflite_micro/src/tflite-xcore-kernels/xcore_error_reporter.h,sha256=fnSTiuJEL5cstbgtiM9rKwpCCNPHFEZr5b_Qu4PY1Yo,794
84
86
  xmos_ai_tools/runtime/include/lib_tflite_micro/src/tflite-xcore-kernels/xcore_interpreter.h,sha256=5-_cbV1uXQDTW51l3F3p06fZB4qx19Z848h9qtoAjE4,1753
85
- xmos_ai_tools/runtime/include/lib_tflite_micro/src/tflite-xcore-kernels/xcore_ops.h,sha256=7dJTjMUId_e9_L1n-fs3PMKBwGFv8tTc_mlAATMt3nU,2327
87
+ xmos_ai_tools/runtime/include/lib_tflite_micro/src/tflite-xcore-kernels/xcore_ops.h,sha256=Po7Im0S-LaasVyFhJuJPieMO6iTdqPROexKODPodjBA,2557
86
88
  xmos_ai_tools/runtime/include/lib_tflite_micro/src/tflite-xcore-kernels/xcore_profiler.h,sha256=5wo0BpSfxebxo-NpAoJYsheULF9u_Nz3xbhjUs2K2Hg,1215
87
89
  xmos_ai_tools/runtime/include/lib_tflite_micro/src/tflite-xcore-kernels/xcore_utils.h,sha256=kynLZ8kJMx4sGQNOkIqoF7zjey1mKVeEbgdGS-UAX_o,4717
88
90
  xmos_ai_tools/runtime/include/lib_xud/lib_xud/api/xud.h,sha256=CpBh7idogG_eZXEe29i306iXbz3Jcnvd5CgptIFG8Lo,20680
@@ -377,17 +379,17 @@ xmos_ai_tools/runtime/include/tensorflow/lite/micro/tools/benchmarking/metrics.h
377
379
  xmos_ai_tools/runtime/include/tensorflow/lite/micro/tools/benchmarking/op_resolver.h,sha256=RGL4qxRe7mT-DjxD0NiFhRvVpuDn5xIuwXdrj6I9avs,6053
378
380
  xmos_ai_tools/runtime/include/tensorflow/lite/schema/schema_generated.h,sha256=V6KZsZ1QF0xtjxBnXJbk32hvtWYnaBkuURjk_Hs9ivs,1073395
379
381
  xmos_ai_tools/runtime/include/tensorflow/lite/schema/schema_utils.h,sha256=Iyv5Rn__Q15pfUm-9DvFU_GFF_8rplBNwor-V5TUi_0,1321
380
- xmos_ai_tools/runtime/lib/libhost_xtflitemicro.a,sha256=OS9Ri-QlojRkRKjjb4OfjDX0tRO1sF8-wblt3Ng-sN8,985832
381
- xmos_ai_tools/runtime/lib/libxtflitemicro.a,sha256=eRwbQz7UZ8Npo1SDbvpdSyxCRCnAZ0iC-D9cSdOrxsc,68882352
382
+ xmos_ai_tools/runtime/lib/libhost_xtflitemicro.a,sha256=Llu9vTvZHrV-7BmqkpD0Z-rsj9EQqAzFKpRDizFPJ1M,1057704
383
+ xmos_ai_tools/runtime/lib/libxtflitemicro.a,sha256=rYiKTYKeRhGRKX07cmE-HPpOVxWe3zY--DTlqDGXL5s,69456482
382
384
  xmos_ai_tools/xformer/__init__.py,sha256=jA0xba6ZitK9HwWvDJewM8AMU4IZnx_iB1GSBrRUGvU,1627
383
385
  xmos_ai_tools/xformer/flash.py,sha256=MG4coi_Lvvg-oQmw1pomJD8eeOH4gAMjixjBFvO2BCk,6376
384
386
  xmos_ai_tools/xinterpreters/__init__.py,sha256=PFRB9VxOLKaA--j2ZvWGcmesv2C6uNYqJ_kBam68aUI,50
385
387
  xmos_ai_tools/xinterpreters/exceptions.py,sha256=HOjADxHYMPI9mN0YIbWxtw9hSeL2B6XWWwqtGtyJdVs,577
386
388
  xmos_ai_tools/xinterpreters/host_interpreter.py,sha256=No-g29_twbIaJ4S4fzU5TGpKd4WPVEE0737HtL877sw,25692
387
- xmos_ai_tools/xinterpreters/libs/macos/xtflm_python.1.0.1.dylib,sha256=IBVBusDfGIhGQnVkQRhS9e7EVGd-WN1lVJeLnSbau1I,965909
388
- xmos_ai_tools/xinterpreters/libs/macos/xtflm_python.dylib,sha256=IBVBusDfGIhGQnVkQRhS9e7EVGd-WN1lVJeLnSbau1I,965909
389
- xmos_ai_tools-1.2.1.dev24.data/data/bin/xcore-opt,sha256=2zLQrLVZDIgJ8r6Shl0WcMpEY1qPxaqi7wywSYKWX5w,144896582
390
- xmos_ai_tools-1.2.1.dev24.dist-info/METADATA,sha256=sziCvDgvhrNqNwl_EHoISq7pMgI8NnqGPziAQcMIOs0,1362
391
- xmos_ai_tools-1.2.1.dev24.dist-info/WHEEL,sha256=mbj6ZioQtbYSI9Enon6Nfaq9PMeblAOX3NoP8Ads9Yw,107
392
- xmos_ai_tools-1.2.1.dev24.dist-info/top_level.txt,sha256=YWegea73ll3tMlRWRdHJemUy2VOuEYDdOIaffxu_eF0,14
393
- xmos_ai_tools-1.2.1.dev24.dist-info/RECORD,,
389
+ xmos_ai_tools/xinterpreters/libs/macos/xtflm_python.1.0.1.dylib,sha256=0xOjM-8fZr333_MACVjIxWcRHqs1MVTDN3svjm2jwpo,1055240
390
+ xmos_ai_tools/xinterpreters/libs/macos/xtflm_python.dylib,sha256=0xOjM-8fZr333_MACVjIxWcRHqs1MVTDN3svjm2jwpo,1055240
391
+ xmos_ai_tools-1.3.0.data/data/bin/xcore-opt,sha256=EXyY70weFXnRCGDOXxvBgCRiupHPA2IVZLAd08XIDKA,142062968
392
+ xmos_ai_tools-1.3.0.dist-info/METADATA,sha256=T2oTA3mLLgPInhVvZfqco9MLtPsr70Y2xvUOV1w-IFo,1356
393
+ xmos_ai_tools-1.3.0.dist-info/WHEEL,sha256=mbj6ZioQtbYSI9Enon6Nfaq9PMeblAOX3NoP8Ads9Yw,107
394
+ xmos_ai_tools-1.3.0.dist-info/top_level.txt,sha256=YWegea73ll3tMlRWRdHJemUy2VOuEYDdOIaffxu_eF0,14
395
+ xmos_ai_tools-1.3.0.dist-info/RECORD,,