BaseInterfaces reference
Index
BaseInterfaces.BaseInterfacesBaseInterfaces.ArrayInterfaceBaseInterfaces.DictInterfaceBaseInterfaces.IterationInterfaceBaseInterfaces.SetInterfaceBaseInterfaces.StringInterface
Docstrings
BaseInterfaces.BaseInterfaces — ModuleBaseInterfaces
BaseInterfaces.jl is a subpackage of Interfaces.jl that provides predifined definition and testing for Base Julia interfaces.
Currently this includes:
- A general iteration interface:
IterationInterface AbstractArrayinterface:ArrayInterfaceAbstractSetinterface:SetInterfaceAbstractDictinterface:DictInterfaceAbstractStringinterface:StringInterface
None of these should be considered complete or authoritative, due both to the size of the task and that many of the interfaces not documented in Base Julia. However, they may be helpful in testing your objects basically conform. Please make issues and PRs with missing behaviours if you find them.
Declaring that it follows the interface is done with:
@implements DictInterface{(:component1, :component2)} MyDict [MyDict(some_values...), MyDict(other_values...)]Optional components can be chosen from Interfaces.optional_keys(DictInterface).
After this you can easily test it with:
Interfaces.test(DictInterface, MyDict)See the docs for use.
If you want to add more Base julia interfaces here, or think the existing ones could be improved, please make an issue or pull request.
BaseInterfaces.ArrayInterface — Type ArrayInterfaceAn Interfaces.jl Interface with mandatory components (:eltype, :ndims, :size, :getindex, :indexstyle) and optional components (:logical, :setindex!, :similar_type, :similar_eltype, :similar_size, :similar_eltype_size).
Base Julia AbstractArray interface
Extended help
Mandatory keys:
eltypendimssize:- size(A) returns a tuple of Integer
- length of size(A) matches ndims(A)
getindex:- Can index with begin/firstindex
- Can index with end/lastindex
- Can index with all indices in
eachindex(A) - Can index with Int for multiple dimensions
- Can index with Int for multiple dimensions and trailing ones
- Can index with Int for multiple dimensions and trailing colons
- Can index with CartesianIndex
- Can index with CartesianIndex and trailing ones
- Can index with CartesianIndices
- Can index with CartesianIndices and trailing ones
- Can index with CartesianIndices and trailing colons
- Can index with UnitRange
- Can index with UnitRange and trailing ones
- Can index with UnitRange and trailing colons
- Can index with StepRange
- Can index with StepRange and trailing ones
- Can index with StepRange and trailing colons
- Can index with a Vector of Int
- Can index with a Vector of Int32
- Can index with a Vector of Int with trailing ones
- Can index with a Vector of Int with trailing colons
indexstyle: IndexStyle returns IndexCartesian or IndexLinear
Optional keys:
logical:- Can index with logical indices
- Can index with logical indices and trailing ones
- Can index with logical indices and trailing colons
- Can index with multidimensional logical indices
- Can index with multidimensional logical indices and trailing ones
- Can index with multidimensional logical indices and trailing colons
setindex!similar_type:similar(A)returns an object the same type and size asAsimilar_eltype: similar(A, T::Type) returns an object the same base type asAwith eltype ofTsimilar_size: similar(A, s::NTuple{Int}) returns an object the same type asAwith sizessimilar_eltype_size: similar(A, T::Type, s::NTuple{Int}) returns an object the same type asAwith eltypeTand sizes
BaseInterfaces.DictInterface — Type DictInterfaceAn Interfaces.jl Interface with mandatory components (:iterate, :length, :eltype, :keytype, :valtype, :keys, :values, :getindex) and optional components (:setindex!, :get!, :delete!, :empty!).
AbstractDict interface
Requires test data wrapped with Interfaces.Arguments, with
d = the_dictmandatory
When get! or setindex! is needed
k: any valid key not initially in dv: any valid value
Extended help
Mandatory keys:
iterate: AbstractDict follows the IterationInterfacelength: length is definedeltype:- eltype is a Pair
- the first value isa eltype
keytype: keytype is the same as the first type in eltype parametersvaltype: valtype is the same as the second type in eltype paremeterskeys: keys are all of type keytypevalues: values are all of type valtypegetindex:- getindex of the first key is the first object in
values - getindex of all keys match values
- getindex of the first key is the first object in
Optional keys:
setindex!:- test object
ddoes not yet have test keyk - can set key
kto valuev
- test object
get!:- test object
ddoes not yet have test keyk - can set and get key
kto valuevwith using get!
- test object
delete!: can delete existing keys from the objectempty!: can empty the dictionary
BaseInterfaces.IterationInterface — Type IterationInterfaceAn Interfaces.jl Interface with mandatory components (:isempty, :iterate, :isiterable, :eltype, :size, :in) and optional components (:reverse, :indexing).
An interface for Base Julia iteration.
Test objects must not be empty, so that isempty(obj) == false.
Extended help
Mandatory keys:
isempty: test iterator is not emptyiterate:iteratedoes not returnnothingiteratereturns aTuple- second
iteratereturns aTupleorNothing
isiterableeltypesizein:inreturns true for all values in x
Optional keys:
reverseindexing:- can call firstindex
- can call lastindex
- can call getindex
- getindex matches iteration order
BaseInterfaces.SetInterface — Type SetInterfaceAn Interfaces.jl Interface with mandatory components (:isempty, :eltype, :length, :iteration) and optional components (:copy, :empty, :hasfastin, :setdiff, :intersect, :union, :copymutable, :emptymutable, :empty!, :delete!, :push!, :sizehint!).
The AbstractSet interface
Extended help
Mandatory keys:
isempty: definesisemptyand testdata is not emptyeltype: elements eltype of setsare subtypes ofeltype(s)length: set defines length and test object has length larger than zeroiteration: follows the IterationInterface
Optional keys:
copy: creates an identical object with the same values, that is not the same objectempty:- returns an empty set able to hold elements of type U
- returns an empty set able to hold elements of arbitrary types
hasfastin:hasfastinreturns aBoolsetdiff:- setdiff with itself is an empty set of the same type
- setdiff with an empty set is equal to itself
intersect:intersectof set with itself is itselfintersectof set with an empty set is an empty set
union:- union of a set with itself equals itself
- union of a set an empty set equals itself
copymutable: creates an identical mutable object with the same values, that is not the same objectemptymutable:- returns an empty set able to hold elements of type U
- returns an empty set able to hold elements of arbitrary types
empty!: empty! removes all elements from the setdelete!: delete! removes element valued x of the setpush!: push! adds an element to the setsizehint!: can set a size hint
BaseInterfaces.StringInterface — Type StringInterfaceAn Interfaces.jl Interface with mandatory components (:ncodeunits, :iterate, :codeunit, :isvalid, :eltype) and optional components (:length,).
AbstractString interface
Test objects must not be empty, so that isempty(obj) == false.
Extended help
Mandatory keys:
ncodeunits: ncodeunit returns an Intiterate: AbstractString follows the IterationInterfacecodeunit: the first codeunit is a UInt8/16/32isvalid: isvalid returns a Booleltype: eltype returns a type <: AbatractChar
Optional keys:
length: length return an Int