Skip to content

Commit

Permalink
add docs and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
vincentcp committed Apr 25, 2019
1 parent 419f90f commit e8eaa62
Show file tree
Hide file tree
Showing 19 changed files with 842 additions and 275 deletions.
14 changes: 7 additions & 7 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ after_success:
- julia --project=coverage/ coverage/coverage.jl

# jobs:
# include:
# - stage: "Documentation"
# julia: 1.0
# os: linux
# script:
# - julia --project=docs/ --color=yes docs/make.jl deploy
# after_success: skip
include:
- stage: "Documentation"
julia: 1.0
os: linux
script:
- julia --project=docs/ --color=yes docs/make.jl deploy
after_success: skip
23 changes: 22 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,24 @@
# InfiniteVectors.jl

Under construction
*A Julia package for infinite vectors operations such as convolution and z-transform.*



| **Documentation** | **Build Status** | **Coverage** |
|-------------------|------------------|--------------|
| [![Documentation](https://img.shields.io/badge/docs-stable-blue.svg)](https://vincentcp.github.io/InfiniteVectors.jl/stable) [![Documentation](https://img.shields.io/badge/docs-dev-blue.svg)](https://vincentcp.github.io/InfiniteVectors.jl/dev) | [![Build Status](https://travis-ci.org/vincentcp/InfiniteVectors.jl.png)](https://travis-ci.org/vincentcp/InfiniteVectors.jl) [![Build status](https://ci.appveyor.com/api/projects/status/gh4ka7m9a7qekqu8?svg=true)](https://ci.appveyor.com/project/vincentcp/InfiniteVectors-jl) | [![Coverage](https://codecov.io/gh/vincentcp/InfiniteVectors.jl/branch/master/graph/badge.svg)](https://codecov.io/gh/vincentcp/InfiniteVectors.jl) [![Coverage Status](https://coveralls.io/repos/github/vincentcp/InfiniteVectors.jl/badge.svg)](https://coveralls.io/github/vincentcp/InfiniteVectors.jl) |


Installation instructions and full functionality can be found in the [documentation](https://vincentcp.github.io/InfiniteVectors.jl/dev)

## Examples

```julia
julia> using InfiniteVectors, PGFPlotsX
julia> Plot(CompactInfiniteVector(1:4,-1))
```
![svg](test/example1.svg)
```julia
julia> Plot(PeriodicInfiniteVector(1:10))
```
![svg](test/example2.svg)
4 changes: 2 additions & 2 deletions docs/make.jl
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ makedocs(sitename="InfiniteVectors.jl",
format = format,
pages = [
"Home" => "index.md",
"Manual" =>Any["man/indices.md","man/doublyinfinite.md"],
"Development" =>["development.md"]
"Manual" =>Any["man/indices.md","man/vectors.md","man/vectoroperations.md"],
"Developer information" =>["development.md"]
],
doctest=true
)
Expand Down
15 changes: 12 additions & 3 deletions docs/src/development.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
# [Development](@id development)

# [Developer information](@id development)
```@setup dev
using InfiniteVectors
```

```@docs
CardinalBSplines.AbstractFiniteNZInfiniteVector
InfiniteVectors.ZTransform
InfiniteVectors.Integers
InfiniteVectors.BiInfiniteVector
InfiniteVectors.hascompactsupport
InfiniteVectors.nexteven
InfiniteVectors.nextodd
InfiniteVectors.previouseven
InfiniteVectors.sublength
```
Empty file removed docs/src/man/doublyinfinite.md
Empty file.
36 changes: 29 additions & 7 deletions docs/src/man/indices.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,34 @@

<!-- Infinity, ∞, CompactInfiniteVector, PeriodicInfiniteVector, downsample, upsample, δ, shift, shift!, -->
<!-- ztransform, moment, fouriertransform, *, ⋆, ⊛, hascompactsupport, period, inv, leastsquares_inv, eachnonzeroindex -->
```@meta
DocTestSetup = quote
using InfiniteVectors
end

```@docs
eachnonzeroindex
hascompactsupport
```

# Indices
Even though InfiniteVectors are
Even though an `InfiniteVector` is an `AbstractVector`
```jldoctest man
julia> InfiniteVector <: AbstractVector
true
```
it does not support indexing since
```jldoctest man
julia> vec = CompactInfiniteVector(1:3)
CompactInfiniteVector{Int64} with indices ℤ:
[ …, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, … ]
julia> I = eachindex(vec)
```
which is an object with infinite length.
```jldoctest man
julia> length(I)
```

!!! note
The function `eachnonzeroindex` is supported for vectors that have a finite number of non-zero elements.
```jldoctest man
julia> eachnonzeroindex(vec)
0:2
```
23 changes: 23 additions & 0 deletions docs/src/man/vectoroperations.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Vector operations
```@docs
downsample
upsample
shift
shift!
reverse
reverse!
alternating_flip
alternating
evenpart
oddpart
inv
adjoint
transpose
ztransform
fouriertransform
moment
leastsquares_inv
*
```
47 changes: 47 additions & 0 deletions docs/src/man/vectors.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Vector types

This sections contains a list of the different supported vector types accompanied with the functions specific to those types.

```@contents
Pages = ["vectors.md"]
Depth = 2
```

## Compact vectors

The abstract type for vectors with a finite number of non-zero elements is

```@docs
InfiniteVectors.AbstractFiniteNZInfiniteVector
```

### CompactInfiniteVector
There are two types that support compact vectors. The second one is fully typed.
```@docs
CompactInfiniteVector
FixedInfiniteVector
```
For the dirac delta a special constructor is present.
```@docs
δ
```

### Functions specific to compact vectors
```@docs
eachnonzeroindex
subvector
support
```

## Periodic vectors
```@docs
InfiniteVectors.AbstractPeriodicInfiniteVector
```
```@docs
PeriodicInfiniteVector
```

### Functions specific to periodic vectors
```@docs
period
```
45 changes: 40 additions & 5 deletions src/AbstractCompactInfiniteVector.jl
Original file line number Diff line number Diff line change
@@ -1,17 +1,41 @@
"""
AbstractFiniteNZInfiniteVector{T} <: AbstractDoubleInfiniteVector{T}
AbstractFiniteNZInfiniteVector{T} <: BiInfiniteVector{T}
Instance of AbstractDoubleInfiniteVector that implements `eachnonzeroindex(vec)`.
Instance of BiInfiniteVector that implements `eachnonzeroindex(vec)`.
Also `hascompactsupport(vec) == true`
"""
abstract type AbstractFiniteNZInfiniteVector{T} <: AbstractDoubleInfiniteVector{T} end
abstract type AbstractFiniteNZInfiniteVector{T} <: BiInfiniteVector{T} end

"""
hascompactsupport(vec::InfiniteVector)
Are their a finite number of non-zero elements.
"""
hascompactsupport(::AbstractFiniteNZInfiniteVector) = true
hascompactsupport(::AbstractDoubleInfiniteVector) = false
hascompactsupport(::InfiniteVector) = false

"""
subvector(vec::CompactInfiniteVector) = vec.subvec
sum(vec::AbstractFiniteNZInfiniteVector) = sum(vec[i] for i in eachnonzeroindex)
The vector of values at `eachnonzeroindex`
"""
@inline subvector(vec::AbstractFiniteNZInfiniteVector) = vec.subvec

"""
sublength(vec::InfiniteVector) = vec.subvec
The number of non-zero indices
"""
@inline sublength(vec::AbstractFiniteNZInfiniteVector) = length(subvector(vec))

sum(vec::AbstractFiniteNZInfiniteVector) = sum(subvector(vec))

"""
moment(vec::InfiniteVector, j)
The j-th discrete moment of a sequence is defined as \$\\sum_{k\\in ℤ} h_k k^j\$.
"""
function moment(vec::AbstractFiniteNZInfiniteVector, j)
z = zero(eltype(vec))
for k in eachnonzeroindex(vec)
Expand All @@ -20,6 +44,12 @@ function moment(vec::AbstractFiniteNZInfiniteVector, j)
z
end

"""
ztransform(vec::InfiniteVector, z)
The Z transform of a sequence is a continuous function of `z`, defined by
\$S(z) = \\sum_{k\\in ℤ} s_k z^{-k}\$
"""
function ztransform(vec::AbstractFiniteNZInfiniteVector, z)
T = promote_type(eltype(vec), eltype(z), eltype(1/z))
S = zero(T)
Expand All @@ -28,3 +58,8 @@ function ztransform(vec::AbstractFiniteNZInfiniteVector, z)
end
S
end

for op in (:(==), :,)
@eval $op(vec1::AbstractFiniteNZInfiniteVector, vec2::AbstractFiniteNZInfiniteVector) =
$op(subvector(vec1), subvector(vec2)) && (eachnonzeroindex(vec1)==eachnonzeroindex(vec2))
end
82 changes: 0 additions & 82 deletions src/AbstractDoubleInfiniteVector.jl

This file was deleted.

Loading

0 comments on commit e8eaa62

Please sign in to comment.