From 12315aed6407725fa6e0e021053cae4e4f9038b4 Mon Sep 17 00:00:00 2001 From: = <=> Date: Mon, 29 Dec 2025 16:43:38 +0530 Subject: [PATCH 1/7] Added docstrings to exported functions! (rebase) --- src/apply.jl | 17 ----------------- src/combine.jl | 16 ---------------- src/retime.jl | 5 +++++ 3 files changed, 5 insertions(+), 33 deletions(-) diff --git a/src/apply.jl b/src/apply.jl index c2b384d5..ce124dbb 100644 --- a/src/apply.jl +++ b/src/apply.jl @@ -90,23 +90,6 @@ end # diff percentchange(ta::TimeArray, returns::Symbol=:simple; padding::Bool=false, method::AbstractString="") Compute percent change of a `TimeArray`. Use `:simple` or `:log` returns. - -# Arguments -- `padding::Bool=false`: If true, pads the beginning of the result with `NaN` values so the output has the same length as the input. If false, the result is shorter by one (or more, depending on differencing). - -# Example -```julia -using TimeSeries, Dates -ta = TimeArray(Date(2020,1,1):Day(1):Date(2020,1,3), [1,2,4], ["A"]) -percentchange(ta, :simple; padding=true) -# Output: -# 3×1 TimeArray{Float64,1,Date,Array{Float64,2}} -# │ │ A │ -# ├────────────┼────────┤ -# │ 2020-01-01 │ NaN │ -# │ 2020-01-02 │ 1.0 │ -# │ 2020-01-03 │ 1.0 │ -``` """ function percentchange( ta::TimeArray, returns::Symbol=:simple; padding::Bool=false, method::AbstractString="" diff --git a/src/combine.jl b/src/combine.jl index 45ec3361..6a63dced 100644 --- a/src/combine.jl +++ b/src/combine.jl @@ -282,22 +282,6 @@ end map(f, ta::TimeArray{T,N}) Apply function `f` to each row of a `TimeArray`, returning a new `TimeArray`. - -# Example - -```julia -using TimeSeries, Dates -ta = TimeArray(Date(2020,1,1):Day(1):Date(2020,1,3), [1,2,3], ["A"]) -# Add 10 to each value, keep timestamp -map((t, v) -> (t, v .+ 10), ta) -# Output: -# 3×1 TimeArray{Int64,1,Date,Array{Int64,2}} -# │ │ A │ -# ├────────────┼─────┤ -# │ 2020-01-01 │ 11 │ -# │ 2020-01-02 │ 12 │ -# │ 2020-01-03 │ 13 │ -``` """ @generated function map(f, ta::TimeArray{T,N}) where {T,N} input_val = (N == 1) ? :(values(ta)[i]) : :(vec(values(ta)[i, :])) diff --git a/src/retime.jl b/src/retime.jl index 8df412fd..c933ae77 100644 --- a/src/retime.jl +++ b/src/retime.jl @@ -56,6 +56,11 @@ _toExtrapolationMethod(::Val{:missing}) = MissingExtrapolate() _toExtrapolationMethod(::Val{:nan}) = NaNExtrapolate() _toExtrapolationMethod(x::ExtrapolationMethod) = x +""" + retime(ta, new_dt::Dates.Period; kwargs...) + +Resample or align a `TimeArray` to new timestamps or frequency. +""" function retime(ta, new_dt::Dates.Period; kwargs...) new_timestamps = floor(timestamp(ta)[1], new_dt):new_dt:floor(timestamp(ta)[end], new_dt) From a4b36da1009f3c849c4b724760d92ca5f95d6f3f Mon Sep 17 00:00:00 2001 From: = <=> Date: Mon, 29 Dec 2025 21:01:35 +0530 Subject: [PATCH 2/7] Fixed some missing documentations (rebase) --- src/apply.jl | 17 +++++++++++++++++ src/combine.jl | 16 ++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/apply.jl b/src/apply.jl index ce124dbb..c2b384d5 100644 --- a/src/apply.jl +++ b/src/apply.jl @@ -90,6 +90,23 @@ end # diff percentchange(ta::TimeArray, returns::Symbol=:simple; padding::Bool=false, method::AbstractString="") Compute percent change of a `TimeArray`. Use `:simple` or `:log` returns. + +# Arguments +- `padding::Bool=false`: If true, pads the beginning of the result with `NaN` values so the output has the same length as the input. If false, the result is shorter by one (or more, depending on differencing). + +# Example +```julia +using TimeSeries, Dates +ta = TimeArray(Date(2020,1,1):Day(1):Date(2020,1,3), [1,2,4], ["A"]) +percentchange(ta, :simple; padding=true) +# Output: +# 3×1 TimeArray{Float64,1,Date,Array{Float64,2}} +# │ │ A │ +# ├────────────┼────────┤ +# │ 2020-01-01 │ NaN │ +# │ 2020-01-02 │ 1.0 │ +# │ 2020-01-03 │ 1.0 │ +``` """ function percentchange( ta::TimeArray, returns::Symbol=:simple; padding::Bool=false, method::AbstractString="" diff --git a/src/combine.jl b/src/combine.jl index 6a63dced..45ec3361 100644 --- a/src/combine.jl +++ b/src/combine.jl @@ -282,6 +282,22 @@ end map(f, ta::TimeArray{T,N}) Apply function `f` to each row of a `TimeArray`, returning a new `TimeArray`. + +# Example + +```julia +using TimeSeries, Dates +ta = TimeArray(Date(2020,1,1):Day(1):Date(2020,1,3), [1,2,3], ["A"]) +# Add 10 to each value, keep timestamp +map((t, v) -> (t, v .+ 10), ta) +# Output: +# 3×1 TimeArray{Int64,1,Date,Array{Int64,2}} +# │ │ A │ +# ├────────────┼─────┤ +# │ 2020-01-01 │ 11 │ +# │ 2020-01-02 │ 12 │ +# │ 2020-01-03 │ 13 │ +``` """ @generated function map(f, ta::TimeArray{T,N}) where {T,N} input_val = (N == 1) ? :(values(ta)[i]) : :(vec(values(ta)[i, :])) From 79a08eec53b45ba764c2e544cce4a1bd281f20aa Mon Sep 17 00:00:00 2001 From: = <=> Date: Mon, 29 Dec 2025 22:07:12 +0530 Subject: [PATCH 3/7] Fixed typos (rebase) --- src/retime.jl | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/retime.jl b/src/retime.jl index c933ae77..8df412fd 100644 --- a/src/retime.jl +++ b/src/retime.jl @@ -56,11 +56,6 @@ _toExtrapolationMethod(::Val{:missing}) = MissingExtrapolate() _toExtrapolationMethod(::Val{:nan}) = NaNExtrapolate() _toExtrapolationMethod(x::ExtrapolationMethod) = x -""" - retime(ta, new_dt::Dates.Period; kwargs...) - -Resample or align a `TimeArray` to new timestamps or frequency. -""" function retime(ta, new_dt::Dates.Period; kwargs...) new_timestamps = floor(timestamp(ta)[1], new_dt):new_dt:floor(timestamp(ta)[end], new_dt) From 580b1e9010ad6612972f3fd31921ebaca7311fe1 Mon Sep 17 00:00:00 2001 From: = Date: Wed, 31 Dec 2025 20:41:08 +0530 Subject: [PATCH 4/7] Share function docstrings in documentation using @docs blocks --- docs/src/apply.md | 42 ++++++++++++++++++++++++++++++++++++++++++ docs/src/combine.md | 10 ++++++++++ docs/src/readwrite.md | 8 ++++++++ docs/src/retime.md | 38 +++++++++++++++++++++++++++++++++++++- docs/src/split.md | 31 ++++++++++++++++++++++++++++++- 5 files changed, 127 insertions(+), 2 deletions(-) diff --git a/docs/src/apply.md b/docs/src/apply.md index 40cb6b29..883d59a9 100644 --- a/docs/src/apply.md +++ b/docs/src/apply.md @@ -37,6 +37,10 @@ pass `padding=true` as a keyword argument: lag(cl[1:3]; padding=true) ``` +```@docs +lag +``` + ## `lead` Leading values operates similarly to lagging values, but moves things in @@ -59,6 +63,10 @@ into the first date's value slot: lead(cl, 499) ``` +```@docs +lead +``` + ## `diff` Differentiating a time series calculates the finite difference between @@ -77,6 +85,10 @@ parameter `differences`, accepting a positive integer. The default value is `differences=1`. For instance, passing `differences=2` is equivalent to doing `diff(diff(cl))`. +```@docs +diff +``` + ## `percentchange` Calculating change between timestamps is a very common time series @@ -109,6 +121,10 @@ is simpler than multiplying them. To create log returns, pass the symbol percentchange(cl, :log) ``` +```@docs +percentchange +``` + ## `moving` Often when working with time series, you want to take a sliding window @@ -150,6 +166,10 @@ using MarketData upto(sum, cl) ``` +```@docs +upto +``` + ## `basecall` Because the algorithm for the `upto` method needs to be @@ -163,3 +183,25 @@ using TimeSeries using MarketData basecall(cl, cumsum) ``` + +```@docs +basecall +``` + +## `uniformspaced` + +```@docs +uniformspaced +``` + +## `uniformspace` + +```@docs +uniformspace +``` + +## `dropnan` + +```@docs +dropnan +``` diff --git a/docs/src/combine.md b/docs/src/combine.md index d1a06852..0b8d50d1 100644 --- a/docs/src/combine.md +++ b/docs/src/combine.md @@ -135,3 +135,13 @@ using Dates ta = TimeArray([Date(2015, 10, 01), Date(2015, 11, 01)], [15, 16]) map((timestamp, values) -> (timestamp + Year(1), values), ta) ``` + +```@docs +map +``` + +## `hcat` + +```@docs +hcat +``` diff --git a/docs/src/readwrite.md b/docs/src/readwrite.md index 366ceb87..7229f877 100644 --- a/docs/src/readwrite.md +++ b/docs/src/readwrite.md @@ -27,6 +27,10 @@ For example: ta = readtimearray("close.csv"; format="dd/mm/yyyy HH:MM", delim=';') ``` +```@docs +readtimearray +``` + A more robust regex parsing engine is planned so users will not need to pass a time format for anything but the most edge cases. @@ -46,3 +50,7 @@ Timestamp,Close 2000-01-06,95.0 2000-01-07,99.5 ``` + +```@docs +writetimearray +``` diff --git a/docs/src/retime.md b/docs/src/retime.md index 4160db86..e0925aa6 100644 --- a/docs/src/retime.md +++ b/docs/src/retime.md @@ -87,4 +87,40 @@ Available `extrapolate` methods are: ```@example retime new_timestamps = range(DateTime(2019, 12, 31), DateTime(2020, 1, 2), step = Minute(15)) ta_ = retime(ta, new_timestamps, extrapolate=MissingExtrapolate()) -``` \ No newline at end of file +``` + + +```@docs +retime +``` + +## Interpolation Methods + +```@docs +Linear +Previous +Next +Nearest +``` + +## Aggregation Methods + +```@docs +Mean +Min +Max +Count +Sum +Median +First +Last +``` + +## Extrapolation Methods + +```@docs +FillConstant +NearestExtrapolate +MissingExtrapolate +NaNExtrapolate +``` diff --git a/docs/src/split.md b/docs/src/split.md index fbced9bb..4e04b0d2 100644 --- a/docs/src/split.md +++ b/docs/src/split.md @@ -15,6 +15,10 @@ when(cl, dayofweek, 1) when(cl, dayname, "Monday") ``` +```@docs +when +``` + The period argument holds a valid `Date` method. Below are currently available alternatives. @@ -44,6 +48,10 @@ using MarketData from(cl, Date(2001, 12, 27)) ``` +```@docs +from +``` + ## `to` The `to` method truncates a `TimeArray` after the date passed to the @@ -56,6 +64,10 @@ using MarketData to(cl, Date(2000, 1, 5)) ``` +```@docs +to +``` + ## `findwhen` The `findwhen` method test a condition and returns a vector of `Date` or @@ -70,6 +82,10 @@ typeof(green) ohlc[green] ``` +```@docs +findwhen +``` + ## `findall` The `findall` method tests a condition and returns a vector of `Int` @@ -111,6 +127,10 @@ using MarketData head(cl) ``` +```@docs +head +``` + ### `tail` The `tail` method defaults to returning only the last value in a @@ -125,6 +145,10 @@ tail(cl) tail(cl, 3) ``` +```@docs +tail +``` + ## Splitting by period Splitting data by a given function, e.g. `Dates.day` into periods. @@ -134,4 +158,9 @@ using TimeSeries using MarketData split(cl, Dates.day) -``` \ No newline at end of file +``` + + +```@docs +split +``` From e721f4988681a36a1c95907aff6f7d0ff28730fa Mon Sep 17 00:00:00 2001 From: = Date: Sat, 3 Jan 2026 01:14:30 +0530 Subject: [PATCH 5/7] Add API section --- docs/make.jl | 1 + docs/src/api.md | 8 ++++++++ docs/src/apply.md | 44 +++---------------------------------------- docs/src/combine.md | 35 +++++++++++++--------------------- docs/src/index.md | 1 + docs/src/modify.md | 5 +---- docs/src/readwrite.md | 8 -------- docs/src/retime.md | 30 +++-------------------------- docs/src/split.md | 29 ---------------------------- docs/src/timearray.md | 13 +++---------- 10 files changed, 33 insertions(+), 141 deletions(-) create mode 100644 docs/src/api.md diff --git a/docs/make.jl b/docs/make.jl index b5bc0a9b..f8a17016 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -20,6 +20,7 @@ makedocs(; "tables.md", "plotting.md", "retime.md", + "api.md", ], ) diff --git a/docs/src/api.md b/docs/src/api.md new file mode 100644 index 00000000..baf383a9 --- /dev/null +++ b/docs/src/api.md @@ -0,0 +1,8 @@ +# Public API Reference + +This page lists all public functions and types exported by TimeSeries.jl. + +```@autodocs +Modules = [TimeSeries] +Private = false +``` diff --git a/docs/src/apply.md b/docs/src/apply.md index 883d59a9..5a75e40c 100644 --- a/docs/src/apply.md +++ b/docs/src/apply.md @@ -37,10 +37,6 @@ pass `padding=true` as a keyword argument: lag(cl[1:3]; padding=true) ``` -```@docs -lag -``` - ## `lead` Leading values operates similarly to lagging values, but moves things in @@ -63,10 +59,6 @@ into the first date's value slot: lead(cl, 499) ``` -```@docs -lead -``` - ## `diff` Differentiating a time series calculates the finite difference between @@ -85,10 +77,6 @@ parameter `differences`, accepting a positive integer. The default value is `differences=1`. For instance, passing `differences=2` is equivalent to doing `diff(diff(cl))`. -```@docs -diff -``` - ## `percentchange` Calculating change between timestamps is a very common time series @@ -121,10 +109,6 @@ is simpler than multiplying them. To create log returns, pass the symbol percentchange(cl, :log) ``` -```@docs -percentchange -``` - ## `moving` Often when working with time series, you want to take a sliding window @@ -149,10 +133,6 @@ As mentioned previously, we lose the first nine observations to the consuming nature of this operation. They are not **missing** per se, they simply do not exist. -```@docs -moving -``` - ## `upto` Another operation common in time series analysis is an aggregation @@ -166,10 +146,6 @@ using MarketData upto(sum, cl) ``` -```@docs -upto -``` - ## `basecall` Because the algorithm for the `upto` method needs to be @@ -184,24 +160,10 @@ using MarketData basecall(cl, cumsum) ``` -```@docs -basecall -``` +## `uniformspaced` and `uniformspace` -## `uniformspaced` - -```@docs -uniformspaced -``` - -## `uniformspace` - -```@docs -uniformspace -``` +These methods check or enforce uniform spacing in time series. ## `dropnan` -```@docs -dropnan -``` +Removes rows containing NaN values from a TimeArray. diff --git a/docs/src/combine.md b/docs/src/combine.md index 0b8d50d1..23fd1b38 100644 --- a/docs/src/combine.md +++ b/docs/src/combine.md @@ -54,9 +54,7 @@ meta(CatApple) meta(merge(AppleCat, CatApple)) ``` -```@docs -merge -``` +See [`merge`](@ref) in the Public API Reference for detailed documentation. ## `collapse` @@ -97,9 +95,7 @@ using Statistics collapse(cl, month, last, mean) ``` -```@docs -collapse -``` +See [`collapse`](@ref) in the Public API Reference for detailed documentation. ## `vcat` @@ -112,19 +108,16 @@ which does not consider that its arguments are actually the *same* time series. This concatenation is *vertical* (`vcat`) because it does not create columns, it extends existing ones (which are represented vertically). -```@docs -vcat(tas::Vararg{TimeArray,N} where N) -``` +See [`vcat`](@ref) in the Public API Reference for detailed documentation. ## `map` -This function allows complete transformation of the data within the time -series, with alteration on both the time stamps and the associated -values. It works exactly like `Base.map`: the first argument is a binary -function (the time stamp and the values) that returns two values, -respectively the new time stamp and the new vector of values. It does -not perform any kind of compression like `collapse`, but rather -transformations. +This is a TimeSeries-specific overload of `map` that allows complete transformation +of the data within the time series, with alteration on both the time stamps and +the associated values. The first argument is a binary function that takes the +time stamp and the values and returns two values: the new time stamp and the +new vector of values. It does not perform any kind of compression like `collapse`, +but rather transformations. The simplest example is to postpone all time stamps in the given time series, here by one year: @@ -136,12 +129,10 @@ ta = TimeArray([Date(2015, 10, 01), Date(2015, 11, 01)], [15, 16]) map((timestamp, values) -> (timestamp + Year(1), values), ta) ``` -```@docs -map -``` +See [`map`](@ref) in the Public API Reference for detailed documentation. ## `hcat` -```@docs -hcat -``` +Horizontally concatenates TimeArrays, adding columns. + +See [`hcat`](@ref) in the Public API Reference for detailed documentation. diff --git a/docs/src/index.md b/docs/src/index.md index 6aa3826c..48a4c2d8 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -19,5 +19,6 @@ Pages = [ "tables.md", "plotting.md", "retime.md", + "api.md", ] ``` diff --git a/docs/src/modify.md b/docs/src/modify.md index 85a49358..ebbfa457 100644 --- a/docs/src/modify.md +++ b/docs/src/modify.md @@ -21,7 +21,4 @@ first(rename(Symbol ∘ uppercase ∘ string, ohlc)) first(rename(uppercase, ohlc, String)) ``` -```@docs -rename -rename! -``` +See [`rename`](@ref) and [`rename!`](@ref) in the [Public API Reference](@ref) for detailed documentation. diff --git a/docs/src/readwrite.md b/docs/src/readwrite.md index 7229f877..366ceb87 100644 --- a/docs/src/readwrite.md +++ b/docs/src/readwrite.md @@ -27,10 +27,6 @@ For example: ta = readtimearray("close.csv"; format="dd/mm/yyyy HH:MM", delim=';') ``` -```@docs -readtimearray -``` - A more robust regex parsing engine is planned so users will not need to pass a time format for anything but the most edge cases. @@ -50,7 +46,3 @@ Timestamp,Close 2000-01-06,95.0 2000-01-07,99.5 ``` - -```@docs -writetimearray -``` diff --git a/docs/src/retime.md b/docs/src/retime.md index e0925aa6..555a7abd 100644 --- a/docs/src/retime.md +++ b/docs/src/retime.md @@ -89,38 +89,14 @@ new_timestamps = range(DateTime(2019, 12, 31), DateTime(2020, 1, 2), step = Minu ta_ = retime(ta, new_timestamps, extrapolate=MissingExtrapolate()) ``` - -```@docs -retime -``` - ## Interpolation Methods -```@docs -Linear -Previous -Next -Nearest -``` +Available interpolation methods: `Linear`, `Previous`, `Next`, `Nearest`. ## Aggregation Methods -```@docs -Mean -Min -Max -Count -Sum -Median -First -Last -``` +Available aggregation methods: `Mean`, `Min`, `Max`, `Count`, `Sum`, `Median`, `First`, `Last`. ## Extrapolation Methods -```@docs -FillConstant -NearestExtrapolate -MissingExtrapolate -NaNExtrapolate -``` +Available extrapolation methods: `FillConstant`, `NearestExtrapolate`, `MissingExtrapolate`, `NaNExtrapolate`. diff --git a/docs/src/split.md b/docs/src/split.md index 4e04b0d2..ab9e77b6 100644 --- a/docs/src/split.md +++ b/docs/src/split.md @@ -15,10 +15,6 @@ when(cl, dayofweek, 1) when(cl, dayname, "Monday") ``` -```@docs -when -``` - The period argument holds a valid `Date` method. Below are currently available alternatives. @@ -48,10 +44,6 @@ using MarketData from(cl, Date(2001, 12, 27)) ``` -```@docs -from -``` - ## `to` The `to` method truncates a `TimeArray` after the date passed to the @@ -64,10 +56,6 @@ using MarketData to(cl, Date(2000, 1, 5)) ``` -```@docs -to -``` - ## `findwhen` The `findwhen` method test a condition and returns a vector of `Date` or @@ -82,10 +70,6 @@ typeof(green) ohlc[green] ``` -```@docs -findwhen -``` - ## `findall` The `findall` method tests a condition and returns a vector of `Int` @@ -127,10 +111,6 @@ using MarketData head(cl) ``` -```@docs -head -``` - ### `tail` The `tail` method defaults to returning only the last value in a @@ -145,10 +125,6 @@ tail(cl) tail(cl, 3) ``` -```@docs -tail -``` - ## Splitting by period Splitting data by a given function, e.g. `Dates.day` into periods. @@ -159,8 +135,3 @@ using MarketData split(cl, Dates.day) ``` - - -```@docs -split -``` diff --git a/docs/src/timearray.md b/docs/src/timearray.md index 964b3853..8c710457 100644 --- a/docs/src/timearray.md +++ b/docs/src/timearray.md @@ -56,23 +56,16 @@ relying on variable bindings outside of the object's type fields. ## Constructors -```@docs -TimeArray -``` +See the [`TimeArray`](@ref TimeSeries.TimeArray) constructor documentation in the Public API Reference. ## Fields getter functions There are four field getter functions exported. -They are named as same as the field names. +They are named the same as the field names. - [`timestamp`](@ref) - [`values`](@ref) - [`colnames`](@ref) - [`meta`](@ref) -```@docs -timestamp -values -colnames -meta -``` +See the Public API Reference for detailed documentation of these functions. From a6ea8007955c90e1ae67f70876338aafd66bb20f Mon Sep 17 00:00:00 2001 From: = Date: Wed, 21 Jan 2026 20:36:35 +0530 Subject: [PATCH 6/7] Included all Base.* methods in the API reference page --- Project.toml | 2 +- docs/src/api.md | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 7e773ae0..495b9801 100644 --- a/Project.toml +++ b/Project.toml @@ -22,7 +22,7 @@ RecipesBase = "0.5, 0.7, 0.8, 1.0" Reexport = "1" Statistics = "1" Tables = "1" -julia = "1.6" +julia = "1.11" PrettyTables = "2,3" IteratorInterfaceExtensions = "1" TableTraits = "1" diff --git a/docs/src/api.md b/docs/src/api.md index baf383a9..e2df34e2 100644 --- a/docs/src/api.md +++ b/docs/src/api.md @@ -6,3 +6,20 @@ This page lists all public functions and types exported by TimeSeries.jl. Modules = [TimeSeries] Private = false ``` + +## Base Method Extensions + +TimeSeries.jl extends several Base methods to work with `TimeArray` objects: + +```@docs +Base.hcat(::TimeArray, ::TimeArray) +Base.hcat(::TimeArray, ::TimeArray, ::Vararg{TimeArray}) +Base.vcat(::TimeArray...) +Base.map +Base.split(::TimeSeries.TimeArray, ::Function) +Base.:+ +Base.:- +Base.:(==) +Base.eachrow +Base.eachcol +``` \ No newline at end of file From 3a2cdca669e00a8d5cda5833d57e36cfc9928491 Mon Sep 17 00:00:00 2001 From: = Date: Sun, 25 Jan 2026 11:21:34 +0530 Subject: [PATCH 7/7] Changed Julia's version --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 495b9801..19f0ebe9 100644 --- a/Project.toml +++ b/Project.toml @@ -22,7 +22,7 @@ RecipesBase = "0.5, 0.7, 0.8, 1.0" Reexport = "1" Statistics = "1" Tables = "1" -julia = "1.11" +julia = "1.10" PrettyTables = "2,3" IteratorInterfaceExtensions = "1" TableTraits = "1"