Skip to content

Commit

Permalink
Merge pull request #48 from PharmCat/dev
Browse files Browse the repository at this point in the history
v0.3.1

  - deleteat! fix
  - simulation crush fix
  - Equivalence Hypothesis alpha level fix!
  • Loading branch information
PharmCat authored Oct 2, 2020
2 parents 7af83a2 + b575cdf commit e712fbf
Show file tree
Hide file tree
Showing 11 changed files with 68 additions and 46 deletions.
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
authors = ["Vladimir Arnautov ([email protected])"]
name = "ClinicalTrialUtilities"
uuid = "535c2557-d7d0-564d-8ff9-4ae146c18cfe"
version = "0.3.0"
version = "0.3.1"

[deps]
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
[![Coverage Status](https://coveralls.io/repos/github/PharmCat/ClinicalTrialUtilities.jl/badge.svg?branch=master)](https://coveralls.io/github/PharmCat/ClinicalTrialUtilities.jl?branch=master)
[![Latest docs](https://img.shields.io/badge/docs-latest-blue.svg)](https://pharmcat.github.io/ClinicalTrialUtilities.jl/dev/)

## Difference since v0.2.7
## Difference since v0.3.0

Changes in Equivalence Hypothesis alpha level! See [here](https://github.com/PharmCat/ClinicalTrialUtilities.jl/issues/46)!
Wrong Equivalence Hypothesis alpha level! Use 0.2.7 or 0.3.1 version.

## Description

Expand Down Expand Up @@ -38,7 +38,7 @@ using Pkg; Pkg.add("ClinicalTrialUtilities");
**NB! Hypothesis types:**

- :ea - Equality: two-sided;
- :ei - Equivalencens: two one-sided hypothesis;
- :ei - Equivalencens: two one-sided hypothesis (TOST);
- :ns - Non-Inferiority / Superiority: one-sided hypothesis, for some cases you should use two-sided hypothesis for Non-Inferiority/Superiority, you can use alpha/2 for this;

```
Expand Down
6 changes: 6 additions & 0 deletions cange.log
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
v0.3.1

- deleteat! fix
- simulation crush fix
- Equivalence Hypothesis alpha level fix!

v0.3.0
- #44 , #45 , #46
- update test
Expand Down
13 changes: 7 additions & 6 deletions src/ClinicalTrialUtilities.jl
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,14 @@ catch
global lgamma(x) = SpecialFunctions.lgamma(x)
end

#=
try
if collect(methods(DataFrames.delete!, (AbstractDataFrame, Any)))[1].file == Symbol("deprecated.jl")
DataFrames.delete!(df::AbstractDataFrame, inds) = deleterows!(df, inds)
end
catch
end

=#

const ZDIST = Normal()
const LOG2 = log(2)
Expand All @@ -53,7 +54,10 @@ include("proportion.jl")
include("means.jl")

include("hypothesis.jl")

#DataSET
include("dataset.jl")
#Frequency
include("freque.jl")
#Confidence interval calculation
include("ci.jl")

Expand All @@ -69,14 +73,11 @@ include("samplesize.jl")
include("sim.jl")
#info function
include("info.jl")
#DataSET
include("dataset.jl")

#Descriptive statistics
include("descriptives.jl")
#PK
include("pk.jl")
#Frequency
include("freque.jl")
#Export
include("export.jl")
#Randomization
Expand Down
17 changes: 15 additions & 2 deletions src/ci.jl
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,12 @@ end
function StatsBase.confint(param::Mean; level = 0.95, method = :default)::ConfInt
meanci(param.m, param.sd^2, param.n; alpha = 1 - level, method = method)
end
function StatsBase.confint(param::DiffMean{true}; level = 0.95, method = :default)::ConfInt where T <: Mean
function StatsBase.confint(param::DiffMean{true}; level = 0.95, method = :default)::ConfInt
diffmeanci(param.a.m, param.a.sd^2, param.a.n, param.b.m, param.b.sd^2, param.b.n; alpha = 1 - level, method = method)
end
function StatsBase.confint(param::MetaProp; level = 0.95, method = :default)::ConfInt
error()
end

"""
Expand Down Expand Up @@ -109,6 +112,7 @@ function basepval(param::T, hyp::Equality; method = :default, atol = 1E-6) where
end
p
end
#-------------------------------------------------------------------------------
"""
propci(x::Int, n::Int; alpha=0.05, method = :default)::ConfInt
Expand Down Expand Up @@ -190,6 +194,11 @@ function diffpropci(x1::Int, n1::Int, x2::Int, n2::Int; alpha::Real = 0.05, meth
throw(ArgumentError("Method unknown!"))
end
end
#TEST
function diffpropci(tab::ConTab{2,2}; alpha::Real = 0.05, method::Symbol = :default)::ConfInt
diffpropci(tab.a, tab.a + tab.b, tab.c, tab.c + tab.d; alpha = alpha, method = method)
end

"""
rrpropci(x1::Int, n1::Int, x2::Int, n2::Int; alpha::Real = 0.05,
method::Symbol = :default)::ConfInt
Expand Down Expand Up @@ -293,7 +302,11 @@ function diffmeanci(m1::Real, s1::Real, n1::Real, m2::Real, s2::Real, n2::Real;
end
end

#-----------------------------PROPORTIONS-----------------------------------

################################################################################
# ATOMIC FUNCTIONS
################################################################################
#-----------------------------PROPORTIONS---------------------------------------

#Wilson’s confidence interval for a single proportion, wilson score
#Wilson, E.B. (1927) Probable inference, the law of succession, and statistical inferenceJ. Amer.Stat. Assoc22, 209–212
Expand Down
8 changes: 5 additions & 3 deletions src/freque.jl
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ function contab(data::DataFrame, sort; row::Symbol, col::Symbol)
tempdf = DataFrame(row = Vector{eltype(data[!, row])}(undef, 0), col = Vector{eltype(data[!, col])}(undef, 0))
rename!(tempdf, rcv)
for si = 1:size(slist, 1)
if size(tempdf, 1) > 0 delete!(tempdf, 1:size(tempdf, 1)) end
if size(tempdf, 1) > 0 deleterows!(tempdf, 1:size(tempdf, 1)) end
for i = 1:size(data, 1)
if data[i, sort] == slist[si, :]
push!(tempdf, data[i, rcv])
Expand Down Expand Up @@ -160,7 +160,7 @@ function mcnmcontab(data::DataFrame, sort; row::Symbol, col::Symbol)
tempdf = DataFrame(row = Vector{eltype(data[!, row])}(undef, 0), col = Vector{eltype(data[!, col])}(undef, 0))
rename!(tempdf, rcv)
for si = 1:size(slist, 1)
if size(tempdf, 1) > 0 delete!(tempdf, 1:size(tempdf, 1)) end
if size(tempdf, 1) > 0 deleterows!(tempdf, 1:size(tempdf, 1)) end
for i = 1:size(data, 1)
if data[i, sort] == slist[si, :]
push!(tempdf, data[i, rcv])
Expand Down Expand Up @@ -351,6 +351,8 @@ Meta-analysis for 2x2 tables.
tab: vectro of ConTab{2,2} or McnmConTab;
Inverce Variance method used to get variance estimate for fixed effect.
type - type of measure:
- :rr
- :or/
Expand Down Expand Up @@ -438,7 +440,7 @@ function Base.show(io::IO, obj::MetaProp)
println(io, " Trial number (k): $(obj.k)")
println(io, " Model: $(obj.model)")
println(io, " Type: $(obj.type)")
if obj.type == :fixed
if obj.type == :diff
println(io, " Estimate: $(obj.est)")
println(io, " Variance: $(obj.var)")
else
Expand Down
2 changes: 1 addition & 1 deletion src/pk.jl
Original file line number Diff line number Diff line change
Expand Up @@ -885,7 +885,7 @@ function getdatai(data, sort, cols, func; sortby = nothing)
datai[!, i] = Vector{eltype(data[!, i])}(undef, 0)
end
for i = 1:size(sortlist, 1)
if size(datai, 1) > 0 delete!(datai, 1:size(datai, 1)) end
if size(datai, 1) > 0 deleterows!(datai, 1:size(datai, 1)) end
for c = 1:size(data, 1) #For each line in data
if data[c, sort] == sortlist[i,:]
push!(datai, data[c, cols])
Expand Down
24 changes: 12 additions & 12 deletions src/powersamplesize.jl
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ function one_mean_equality(μ₀::Real, μ₁::Real, σ::Real, α::Real, β::Rea
return ((quantile(ZDIST, 1 - α / 2) + quantile(ZDIST, 1 - β)) * σ / (μ₀ - μ₁))^2
end
function one_mean_equivalence(μ₀::Real, μ₁::Real, σ::Real, δ::Real, α::Real, β::Real)::Float64
return*(quantile(ZDIST, 1 - 2 * α) + quantile(ZDIST, 1 - β / 2))/- abs(μ₀ - μ₁)))^2
return*(quantile(ZDIST, 1 - α) + quantile(ZDIST, 1 - β / 2))/- abs(μ₀ - μ₁)))^2
end
function one_mean_superiority(μ₀::Real, μ₁::Real, σ::Real, δ::Real, α::Real, β::Real)::Float64 #Non-inferiority / Superiority
return*(quantile(ZDIST, 1 - α) + quantile(ZDIST, 1 - β))/(μ₀ - μ₁ - δ))^2
Expand All @@ -35,7 +35,7 @@ function two_mean_equality(μ₀::Real, μ₁::Real, σ::Real, α::Real, β::Rea
return (1 + 1 / k)**(quantile(ZDIST, 1 - α / 2) + quantile(ZDIST, 1 - β))/(μ₀ - μ₁))^2
end
function two_mean_equivalence(μ₀::Real, μ₁::Real, σ::Real, δ::Real, α::Real, β::Real, k::Real)::Float64
return (1 + 1 / k)**(quantile(ZDIST, 1 - 2 * α) + quantile(ZDIST, 1 - β / 2))/- abs(μ₀ - μ₁)))^2
return (1 + 1 / k)**(quantile(ZDIST, 1 - α) + quantile(ZDIST, 1 - β / 2))/- abs(μ₀ - μ₁)))^2
end
function two_mean_superiority(μ₀::Real, μ₁::Real, σ::Real, δ::Real, α::Real, β::Real, k::Real)::Float64 #Non-inferiority / Superiority
return (1 + 1 / k)**(quantile(ZDIST, 1 - α) + quantile(ZDIST, 1 - β))/(μ₀ - μ₁ - δ))^2
Expand All @@ -46,7 +46,7 @@ function one_proportion_equality(p₀::Real, p₁::Real, α::Real, β::Real)::Fl
return p₀*(1 - p₀)*((quantile(ZDIST, 1 - α / 2)+quantile(ZDIST, 1 - β))/(p₀ - p₁))^2
end
function one_proportion_equivalence(p₀::Real, p₁::Real, δ::Real, α::Real, β::Real)::Float64
return p₀*(1 - p₀)*((quantile(ZDIST, 1 - 2 * α) + quantile(ZDIST, 1 - β / 2))/(abs(p₀ - p₁) - δ))^2
return p₀*(1 - p₀)*((quantile(ZDIST, 1 - α) + quantile(ZDIST, 1 - β / 2))/(abs(p₀ - p₁) - δ))^2
end
function one_proportion_superiority(p₀::Real, p₁::Real, δ::Real, α::Real, β::Real)::Float64
return p₀*(1 - p₀)*((quantile(ZDIST, 1 - α)+quantile(ZDIST, 1 - β))/(p₀ - p₁ - δ))^2
Expand All @@ -56,7 +56,7 @@ function two_proportion_equality(p₀::Real, p₁::Real, α::Real, β::Real, k::
return (p₀ * (1 - p₀) / k + p₁ * (1 - p₁)) * ((quantile(ZDIST, 1 - α / 2) + quantile(ZDIST, 1 - β))/(p₀-p₁))^2
end
function two_proportion_equivalence(p₀::Real, p₁::Real, δ::Real, α::Real, β::Real, k::Real)::Float64
return (p₀ * (1 - p₀)/k + p₁ * (1 - p₁)) * ((quantile(ZDIST, 1 - 2 * α)+quantile(ZDIST, 1 - β / 2))/- abs(p₀-p₁)))^2
return (p₀ * (1 - p₀)/k + p₁ * (1 - p₁)) * ((quantile(ZDIST, 1 - α)+quantile(ZDIST, 1 - β / 2))/- abs(p₀-p₁)))^2
end
function two_proportion_superiority(p₀::Real, p₁::Real, δ::Real, α::Real, β::Real, k::Real)::Float64
return (p₀ *(1 - p₀) / k + p₁ *(1 - p₁)) * ((quantile(ZDIST, 1 - α)+quantile(ZDIST, 1 - β))/(p₀-p₁-δ))^2
Expand All @@ -66,7 +66,7 @@ function co_proportion_equality(seq, σ::Real, ϵ::Real, α::Real, β::Real)
(quantile(ZDIST, 1 - α / 2) + quantile(ZDIST, 1 - β) * σ) ^ 2 / (seq * ϵ ^ 2)
end
function co_proportion_equivalence(seq, σ::Real, ϵ::Real, δ::Real, α::Real, β::Real)
(quantile(ZDIST, 1 - 2 * α) + quantile(ZDIST, 1 - β / 2) * σ) ^ 2 / (seq *- abs(ϵ)) ^ 2)
(quantile(ZDIST, 1 - α) + quantile(ZDIST, 1 - β / 2) * σ) ^ 2 / (seq *- abs(ϵ)) ^ 2)
end
function co_proportion_superiority(seq, σ::Real, ϵ::Real, δ::Real, α::Real, β::Real)
(quantile(ZDIST, 1 - α) + quantile(ZDIST, 1 - β) * σ) ^ 2 / (seq *- δ) ^ 2)
Expand All @@ -79,7 +79,7 @@ function or_equality(p₀::Real, p₁::Real, α::Real, β::Real, k::Real)::Float
end
function or_equivalence(p₀::Real, p₁::Real, δ::Real, α::Real, β::Real, k::Real)::Float64
OR = p₀ * (1 - p₁) / p₁ / (1 - p₀)
return (1 / k / p₀ / (1 - p₀) + 1 / p₁ / (1 - p₁)) * ((quantile(ZDIST, 1 - 2 * α)+quantile(ZDIST, 1 - β / 2))/(log(OR) - δ))^2
return (1 / k / p₀ / (1 - p₀) + 1 / p₁ / (1 - p₁)) * ((quantile(ZDIST, 1 - α)+quantile(ZDIST, 1 - β / 2))/(log(OR) - δ))^2
end
function or_superiority(p₀::Real, p₁::Real, δ::Real, α::Real, β::Real, k::Real)::Float64
OR = p₀ *(1 - p₁) / p₁ / (1 - p₀)
Expand All @@ -106,7 +106,7 @@ function cox_equality(θ, θ₀, p, α::Float64, β::Real, k::Real)
1.0/p/(1.0/(1+k)*(1.0-1.0/(1+k)))*((quantile(ZDIST, 1 - α / 2) + quantile(ZDIST, 1 - β))/(log(θ)-log(θ₀)))^2
end
function cox_equivalence(θ, θ₀, p, α::Float64, β::Real, k::Real)
1.0/p/(1.0/(1+k)*(1.0-1.0/(1+k)))*((quantile(ZDIST, 1 - 2 * α) + quantile(ZDIST, 1 - β / 2))/(log(θ₀) - abs(log(θ))))^2
1.0/p/(1.0/(1+k)*(1.0-1.0/(1+k)))*((quantile(ZDIST, 1 - α) + quantile(ZDIST, 1 - β / 2))/(log(θ₀) - abs(log(θ))))^2
end
function cox_superiority(θ, θ₀, p, α::Float64, β::Real, k::Real)
1.0/p/(1.0/(1+k)*(1.0-1.0/(1+k)))*((quantile(ZDIST, 1 - α) + quantile(ZDIST, 1 - β))/(log(θ)-log(θ₀)))^2
Expand All @@ -121,7 +121,7 @@ function one_mean_equality_pow(μ₀::Real, μ₁::Real, σ::Real, α::Float64,
end
function one_mean_equivalence_pow(μ₀::Real, μ₁::Real, σ::Real, δ::Real, α::Float64, n::Int)::Float64
z = (abs(μ₀ - μ₁) - δ)/σ * sqrt(n)
return max(0, 2 * (cdf(ZDIST,z - quantile(ZDIST, 1 - 2 * α)) + cdf(ZDIST, -z - quantile(ZDIST, 1 - 2 * α))) - 1)
return max(0, 2 * (cdf(ZDIST,z - quantile(ZDIST, 1 - α)) + cdf(ZDIST, -z - quantile(ZDIST, 1 - α))) - 1)
end
function one_mean_superiority_pow(μ₀::Real, μ₁::Real, σ::Real, δ::Real, α::Float64, n::Int)::Float64 #Non-inferiority / Superiority
z = (μ₀ - μ₁ - δ) / σ*sqrt(n)
Expand All @@ -134,7 +134,7 @@ function two_mean_equality_pow(μ₀::Real, μ₁::Real, σ::Real, α::Float64,
end
function two_mean_equivalence_pow(μ₀::Real, μ₁::Real, σ::Real, δ::Real, α::Float64, n::Int, k::Real)::Float64
z=(abs(μ₀ - μ₁) - δ)/* sqrt((1 + 1 / k) / n))
return max(0, 2 * (cdf(ZDIST, z - quantile(ZDIST, 1 - 2 * α)) + cdf(ZDIST, - z - quantile(ZDIST, 1 - 2 * α))) - 1)
return max(0, 2 * (cdf(ZDIST, z - quantile(ZDIST, 1 - α)) + cdf(ZDIST, - z - quantile(ZDIST, 1 - α))) - 1)
end
function two_mean_superiority_pow(μ₀::Real, μ₁::Real, σ::Real, δ::Real, α::Float64, n::Int, k::Real)::Float64 #Non-inferiority / Superiority
z = (μ₀ - μ₁ - δ)/* sqrt((1 + 1 / k) / n))
Expand All @@ -148,7 +148,7 @@ function one_proportion_equality_pow(p₀::Real, p₁::Real, α::Float64, n::Int
end
function one_proportion_equivalence_pow(p₀::Real, p₁::Real, δ::Real, α::Float64, n::Int)::Float64
z=(abs(p₀-p₁)-δ)/sqrt(p₀*(1-p₀)/n)
return max(0, 2 * (cdf(ZDIST, z - quantile(ZDIST, 1 - 2 * α)) + cdf(ZDIST,- z - quantile(ZDIST, 1 - 2 * α))) - 1)
return max(0, 2 * (cdf(ZDIST, z - quantile(ZDIST, 1 - α)) + cdf(ZDIST,- z - quantile(ZDIST, 1 - α))) - 1)
end
function one_proportion_superiority_pow(p₀::Real, p₁::Real, δ::Real, α::Float64, n::Int)::Float64
z=(p₀-p₁-δ)/sqrt(p₀*(1-p₀)/n)
Expand All @@ -162,7 +162,7 @@ function two_proportion_equality_pow(p₀::Real, p₁::Real, α::Float64, n::Int
end
function two_proportion_equivalence_pow(p₀::Real, p₁::Real, δ::Real, α::Float64, n::Int, k::Real)::Float64
z =- abs(p₀ - p₁)) / sqrt(p₀ * (1 - p₀) / n / k + p₁ * (1 - p₁ ) / n)
return max(0, 2 * (cdf(ZDIST, z - quantile(ZDIST, 1 - 2 * α)) + cdf(ZDIST, - z - quantile(ZDIST, 1 - 2 * α))) - 1)
return max(0, 2 * (cdf(ZDIST, z - quantile(ZDIST, 1 - α)) + cdf(ZDIST, - z - quantile(ZDIST, 1 - α))) - 1)
end
function two_proportion_superiority_pow(p₀::Real, p₁::Real, δ::Real, α::Float64, n::Int, k::Real)::Float64
z = (p₀ - p₁ - δ)/sqrt(p₀ * (1 - p₀) / n / k + p₁ * (1 - p₁) / n)
Expand All @@ -178,7 +178,7 @@ function or_equivalence_pow(p₀::Real, p₁::Real, δ::Real, α::Float64, n::In
#println("$p₀ $p₁ $δ $α $n $k")
OR = p₀ * (1 - p₁)/p₁/(1 - p₀)
z = (abs(log(OR)) - δ) * sqrt(n)/sqrt(1/(k * p₀ * (1 - p₀)) + 1/(p₁ * (1 - p₁)))
return max(0, 2 * (cdf(ZDIST, z - quantile(ZDIST, 1 - 2 * α)) + cdf(ZDIST,-z - quantile(ZDIST, 1 - 2 * α))) - 1)
return max(0, 2 * (cdf(ZDIST, z - quantile(ZDIST, 1 - α)) + cdf(ZDIST,-z - quantile(ZDIST, 1 - α))) - 1)
end
function or_superiority_pow(p₀::Real, p₁::Real, δ::Real, α::Float64, n::Int, k::Real)::Float64
OR = p₀ * (1 - p₁)/p₁/(1 - p₀)
Expand Down
12 changes: 6 additions & 6 deletions src/samplesize.jl
Original file line number Diff line number Diff line change
Expand Up @@ -188,9 +188,9 @@ Clinical trial sample size estimation.
- :or - Odd Ratio;
**type (Hypothesis type):**
- :ea - Equality (two-sided hypothesis, 100\\*(1 - α)% CI);
- :ei - Equivalence (two-sided hypothesis, 100\\*(1 - **2\\*α**)% CI);
- :ns - Non-Inferiority / Superiority (one-sided hypothesis, 100\\*(1 - α)% CI);
- :ea - Equality (two-sided hypothesis, 100\\*(1 - α)% two-sided CI);
- :ei - Equivalence (two-sided hypothesis, 100\\*(1 - **2\\*α**)% two-sided CI);
- :ns - Non-Inferiority / Superiority (one-sided hypothesis, one side of 100\\*(1 -**2\\*α**)% two-sided CI);
- :mcnm - McNemar's Equality test;
**group (group num):**
Expand Down Expand Up @@ -313,9 +313,9 @@ Clinical trial power estimation.
- :or - Odd Ratio;
**type (Hypothesis type):**
- :ea - Equality (two-sided hypothesis, 100\\*(1 - α)% CI);
- :ei - Equivalence (two-sided hypothesis, 100\\*(1 - **2\\*α**)% CI);
- :ns - Non-Inferiority / Superiority (one-sided hypothesis, 100\\*(1 - α)% CI);
- :ea - Equality (two-sided hypothesis, 100\\*(1 - α)% two-sided CI);
- :ei - Equivalence (two-sided hypothesis, 100\\*(1 - **2\\*α**)% two-sided CI);
- :ns - Non-Inferiority / Superiority (one-sided hypothesis, one side of 100\\*(1 -**2\\*α**)% two-sided CI);
- :mcnm - McNemar's Equality test;
**group (group num):**
Expand Down
2 changes: 1 addition & 1 deletion src/sim.jl
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ end
Proportion difference power simulation.
"""
function ctsim(t::CTask{DiffProportion{P, P}, D, H, Power}; nsim = 100, seed=0, method = :default, dropout = 0.0) where P <: Proportion where D where H <: AbstractHypothesis
function ctsim(t::CTask{DiffProportion{P1, P2}, D, H, Power}; nsim = 100, seed=0, method = :default, dropout = 0.0) where P1 <: Proportion where P2 <: Proportion where D where H <: AbstractHypothesis
if seed != 0 Random.seed!(seed) end
n₁ = getval(t.objective)
n₂ = Int(ceil(getval(t.objective) / t.k))
Expand Down
Loading

2 comments on commit e712fbf

@PharmCat
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@JuliaRegistrator register

Release notes:

v0.3.1

  • deleteat! fix
  • simulation crush fix
  • Equivalence Hypothesis alpha level fix!

@JuliaRegistrator
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Registration pull request created: JuliaRegistries/General/22335

After the above pull request is merged, it is recommended that a tag is created on this repository for the registered package version.

This will be done automatically if the Julia TagBot GitHub Action is installed, or can be done manually through the github interface, or via:

git tag -a v0.3.1 -m "<description of version>" e712fbff1b63d85f71857048f487e69a7e57f290
git push origin v0.3.1

Please sign in to comment.