/
AbstractCentrallySymmetricPolytope.jl
96 lines (68 loc) · 2.17 KB
/
AbstractCentrallySymmetricPolytope.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import Base.isempty
export AbstractCentrallySymmetricPolytope,
center,
an_element,
vertices_list,
singleton_list
"""
AbstractCentrallySymmetricPolytope{N<:Real} <: AbstractPolytope{N}
Abstract type for centrally symmetric, polytopic sets.
It combines the `AbstractCentrallySymmetric` and `AbstractPolytope` interfaces.
Such a type combination is necessary as long as Julia does not support
[multiple inheritance](https://github.com/JuliaLang/julia/issues/5).
### Notes
Every concrete `AbstractCentrallySymmetricPolytope` must define the following
functions:
- from `AbstractCentrallySymmetric`:
- `center(::AbstractCentrallySymmetricPolytope{N})::Vector{N}` -- return the
center point
- from `AbstractPolytope`:
- `vertices_list(::AbstractCentrallySymmetricPolytope{N})::Vector{Vector{N}}`
-- return a list of all vertices
```jldoctest
julia> subtypes(AbstractCentrallySymmetricPolytope)
4-element Array{Any,1}:
AbstractHyperrectangle
Ball1
LineSegment
Zonotope
```
"""
abstract type AbstractCentrallySymmetricPolytope{N<:Real} <: AbstractPolytope{N}
end
# --- common AbstractCentrallySymmetric functions (copy-pasted) ---
"""
dim(P::AbstractCentrallySymmetricPolytope)::Int
Return the ambient dimension of a centrally symmetric, polytopic set.
### Input
- `P` -- centrally symmetric, polytopic set
### Output
The ambient dimension of the polytopic set.
"""
@inline function dim(P::AbstractCentrallySymmetricPolytope)::Int
return length(center(P))
end
"""
an_element(P::AbstractCentrallySymmetricPolytope{N})::Vector{N}
where {N<:Real}
Return some element of a centrally symmetric polytope.
### Input
- `P` -- centrally symmetric polytope
### Output
The center of the centrally symmetric polytope.
"""
function an_element(P::AbstractCentrallySymmetricPolytope{N}
)::Vector{N} where {N<:Real}
return center(P)
end
"""
isempty(P::AbstractCentrallySymmetricPolytope)::Bool
Return if a centrally symmetric, polytopic set is empty or not.
### Input
- `P` -- centrally symmetric, polytopic set
### Output
`false`.
"""
function isempty(P::AbstractCentrallySymmetricPolytope)::Bool
return false
end