@@ -1868,33 +1868,68 @@ end
1868
1868
end
1869
1869
1870
1870
function Reactant. traced_type_inner (
1871
- @nospecialize (RT:: Type{<:StepRangeLen } ),
1871
+ @nospecialize (RT:: Type{<:UnitRange{<:ReactantPrimitive} } ),
1872
1872
seen,
1873
1873
mode:: Reactant.TraceMode ,
1874
1874
track_numbers:: Type ,
1875
1875
sharding,
1876
1876
runtime,
1877
1877
)
1878
- if ! (Number <: track_numbers )
1879
- modified_track_numbers = Number
1878
+ (T,) = RT. parameters
1879
+ newT = Reactant. traced_type_inner (T, seen, mode, track_numbers, sharding, runtime)
1880
+ if T == newT
1881
+ return RT
1880
1882
else
1881
- modified_track_numbers = track_numbers
1883
+ return TracedRNumberOverrides . TracedUnitRange{newT}
1882
1884
end
1885
+ end
1886
+
1887
+ function Reactant. make_tracer (
1888
+ seen,
1889
+ @nospecialize (prev:: UnitRange ),
1890
+ @nospecialize (path),
1891
+ mode;
1892
+ @nospecialize (sharding = Sharding. NoSharding ()),
1893
+ kwargs... ,
1894
+ )
1895
+ Reactant. Sharding. is_sharded (sharding) && error (" Cannot specify sharding for UnitRange" )
1896
+ if mode == Reactant. TracedToTypes
1897
+ push! (path, Core. Typeof (prev))
1898
+ make_tracer (seen, prev. start, path, mode; kwargs... )
1899
+ make_tracer (seen, prev. stop, path, mode; kwargs... )
1900
+ return nothing
1901
+ end
1902
+ newstart = Reactant. make_tracer (
1903
+ seen, prev. start, Reactant. append_path (path, :start ), mode; kwargs...
1904
+ )
1905
+ newstop = Reactant. make_tracer (
1906
+ seen, prev. stop, Reactant. append_path (path, :stop ), mode; kwargs...
1907
+ )
1908
+ if typeof (newstart) == typeof (prev. start) && typeof (newstop) == typeof (prev. stop)
1909
+ return prev
1910
+ else
1911
+ return TracedRNumberOverrides. TracedUnitRange (newstart, newstop)
1912
+ end
1913
+ end
1914
+
1915
+ function Reactant. traced_type_inner (
1916
+ @nospecialize (RT:: Type{<:StepRangeLen} ),
1917
+ seen,
1918
+ mode:: Reactant.TraceMode ,
1919
+ track_numbers:: Type ,
1920
+ sharding,
1921
+ runtime,
1922
+ )
1883
1923
T, R, S, L = RT. parameters
1884
- return TracedRNumberOverrides. TracedStepRangeLen{
1885
- Reactant. traced_type_inner (
1886
- T, seen, mode, modified_track_numbers, sharding, runtime
1887
- ),
1888
- Reactant. traced_type_inner (
1889
- R, seen, mode, modified_track_numbers, sharding, runtime
1890
- ),
1891
- Reactant. traced_type_inner (
1892
- S, seen, mode, modified_track_numbers, sharding, runtime
1893
- ),
1894
- Reactant. traced_type_inner (
1895
- L, seen, mode, modified_track_numbers, sharding, runtime
1896
- ),
1897
- }
1924
+ newT = Reactant. traced_type_inner (T, seen, mode, track_numbers, sharding, runtime)
1925
+ newR = Reactant. traced_type_inner (R, seen, mode, track_numbers, sharding, runtime)
1926
+ newS = Reactant. traced_type_inner (S, seen, mode, track_numbers, sharding, runtime)
1927
+ newL = Reactant. traced_type_inner (L, seen, mode, track_numbers, sharding, runtime)
1928
+ if T == newT && R == newR && S == newS && L == newL
1929
+ return RT
1930
+ else
1931
+ return TracedRNumberOverrides. TracedStepRangeLen{newT,newR,newS,newL}
1932
+ end
1898
1933
end
1899
1934
1900
1935
function Reactant. make_tracer (
@@ -1909,44 +1944,30 @@ function Reactant.make_tracer(
1909
1944
error (" Cannot specify sharding for StepRangeLen" )
1910
1945
if mode == Reactant. TracedToTypes
1911
1946
push! (path, Core. Typeof (prev))
1912
- make_tracer (seen, prev. ref, path, mode; kwargs... )
1913
- make_tracer (seen, prev. step, path, mode; kwargs... )
1914
- make_tracer (seen, prev. len, path, mode; kwargs... )
1915
- make_tracer (seen, prev. offset, path, mode; kwargs... )
1947
+ make_tracer (seen, prev. ref, path, mode; sharding, kwargs... )
1948
+ make_tracer (seen, prev. step, path, mode; sharding, kwargs... )
1949
+ make_tracer (seen, prev. len, path, mode; sharding, kwargs... )
1950
+ make_tracer (seen, prev. offset, path, mode; sharding, kwargs... )
1916
1951
return nothing
1917
1952
end
1918
- return TracedRNumberOverrides. TracedStepRangeLen (
1919
- Reactant. make_tracer (
1920
- seen,
1921
- prev. ref,
1922
- Reactant. append_path (path, :ref ),
1923
- mode;
1924
- kwargs... ,
1925
- track_numbers= Number,
1926
- ),
1927
- Reactant. make_tracer (
1928
- seen,
1929
- prev. step,
1930
- Reactant. append_path (path, :step ),
1931
- mode;
1932
- kwargs... ,
1933
- track_numbers= Number,
1934
- ),
1935
- Reactant. make_tracer (
1936
- seen,
1937
- prev. len,
1938
- Reactant. append_path (path, :len ),
1939
- mode;
1940
- kwargs... ,
1941
- track_numbers= Number,
1942
- ),
1943
- Reactant. make_tracer (
1944
- seen,
1945
- prev. offset,
1946
- Reactant. append_path (path, :offset ),
1947
- mode;
1948
- kwargs... ,
1949
- track_numbers= Number,
1950
- ),
1953
+ newref = Reactant. make_tracer (
1954
+ seen, prev. ref, Reactant. append_path (path, :ref ), mode; sharding, kwargs...
1955
+ )
1956
+ newstep = Reactant. make_tracer (
1957
+ seen, prev. step, Reactant. append_path (path, :step ), mode; sharding, kwargs...
1958
+ )
1959
+ newlen = Reactant. make_tracer (
1960
+ seen, prev. len, Reactant. append_path (path, :len ), mode; sharding, kwargs...
1961
+ )
1962
+ newoffset = Reactant. make_tracer (
1963
+ seen, prev. offset, Reactant. append_path (path, :offset ), mode; sharding, kwargs...
1951
1964
)
1965
+ if typeof (newref) == typeof (prev. ref) &&
1966
+ typeof (newstep) == typeof (prev. step) &&
1967
+ typeof (newlen) == typeof (prev. len) &&
1968
+ typeof (newoffset) == typeof (prev. offset)
1969
+ return prev
1970
+ else
1971
+ return TracedRNumberOverrides. TracedStepRangeLen (newref, newstep, newlen, newoffset)
1972
+ end
1952
1973
end
0 commit comments