@@ -1232,6 +1232,68 @@ function make_tracer(
1232
1232
return newa
1233
1233
end
1234
1234
1235
+ function make_tracer (
1236
+ seen,
1237
+ @nospecialize (prev:: Dict{Key,Value} ),
1238
+ @nospecialize (path),
1239
+ mode;
1240
+ @nospecialize (track_numbers:: Type = Union{}),
1241
+ @nospecialize (sharding = Sharding. NoSharding ()),
1242
+ kwargs... ,
1243
+ ) where {Key,Value}
1244
+ RT = Core. Typeof (prev)
1245
+ # XXX : If someone wants to shard the same array with different shardings, we need to
1246
+ # somehow handle this correctly... Right now we just use the first sharding.
1247
+ if mode != NoStopTracedTrack && haskey (seen, prev)
1248
+ if mode == TracedToTypes
1249
+ visited = seen[prev]
1250
+ push! (path, visited)
1251
+ return nothing
1252
+ end
1253
+ return seen[prev]
1254
+ end
1255
+ if eltype (RT) <: ReactantPrimitive
1256
+ if mode == ArrayToConcrete && return seen[prev] = ConcreteRArray (prev; sharding)
1257
+ elseif mode == TracedToTypes
1258
+ # Original array can get mutated so we store a copy:
1259
+ push! (path, copy (prev))
1260
+ seen[prev] = VisitedObject (length (seen) + 1 )
1261
+ return nothing
1262
+ end
1263
+ elseif mode == TracedToTypes
1264
+ push! (path, RT)
1265
+ for (k, v) in prev
1266
+ make_tracer (seen, k, path, mode; track_numbers, sharding, kwargs... )
1267
+ make_tracer (seen, v, path, mode; track_numbers, sharding, kwargs... )
1268
+ end
1269
+ return nothing
1270
+ end
1271
+ Value2 = traced_type (Value, Val (mode), track_numbers, sharding)
1272
+ newa = Dict {Key,Value2} ()
1273
+ seen[prev] = newa
1274
+ same = true
1275
+ for (k, v) in prev
1276
+ nv = make_tracer (
1277
+ seen,
1278
+ v,
1279
+ append_path (path, k),
1280
+ mode;
1281
+ track_numbers,
1282
+ sharding= Base. getproperty (sharding, k),
1283
+ kwargs... ,
1284
+ )
1285
+ if v != = nv
1286
+ same = false
1287
+ end
1288
+ newa[k] = nv
1289
+ end
1290
+ if same
1291
+ seen[prev] = prev
1292
+ return prev
1293
+ end
1294
+ return newa
1295
+ end
1296
+
1235
1297
function make_tracer (
1236
1298
seen,
1237
1299
@nospecialize (prev:: Tuple ),
0 commit comments