You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
While cleaning up some of my abandoned branches (namely #74, abandoned due to upstream work in GATLab that will make everything easier), I found a mmd diagram I made to help myself figure out how all the machinery in ACSets works. There's enough parameteric types in this package that it is somewhat daunting when one opens up a file, without some sort of guide as to how everything is organized. I am posting an issue here to see if it would be helpful to use it or something similar for a dev docs for users looking to contribute.
There are a few problems though:
the diagram must be manually updated when things change
I am not sure how best to indicate files/lines that each type is defined at, in the diagram
the diagram must be manually updated when things change
What do other think?
classDiagram
namespace ACSetInterface {
class PartsType ["abstract PartsType{S,T}"]
class DenseParts ["abstract DenseParts{S,T}"]
class MarkAsDeleted ["abstract MarkAsDeleted{S,T}"]
class UnionFind ["abstract UnionFind{S,T}"]
class MarkAsDeletedUnionFind ["MarkAsDeletedUnionFind UnionFind{S,T}"]
class ACSet ["abstract ACSet{PT}"] {
PT <: PartsType
}
}
PartsType <|-- DenseParts : PartsType{S,T}
PartsType <|-- MarkAsDeleted : PartsType{S,T}
PartsType <|-- UnionFind : PartsType{S,T}
PartsType <|-- MarkAsDeletedUnionFind : PartsType{S,T}
namespace DenseACSets {
class SimpleACSet ["abstract SimpleACSet{PT}"]
class StructACSet ["abstract StructACSet{S,Ts,PT}"] {
S <: TypeLevelSchema{Symbol} : schema
Ts <: Tuple : types of attributes
}
class StructCSet ["StructCSet{S,PT}"]
}
ACSet <|-- SimpleACSet : ACSet{PT}
SimpleACSet <|-- StructACSet : SimpleACSet{PT}
StructACSet <|-- StructCSet : StructACSet{S,Tuple{},PT}
namespace Columns {
class Column ["abstract Column{S,T}"]
}
namespace ColumnImplementations {
class DenseFinColumn ["DenseFinColumn{V}"] {
m <: VecMap{Int,V}
pc <: TrivialCache{Int,Int}
}
}
Column <|-- DenseFinColumn : Column{Int,Int}
namespace PreimageCaches {
class PreimageCache ["abstract PreimageCache{S,T}"] {
}
class TrivialCache ["TrivialCache{S,T}"]
class StoredPreimageCache ["StoredPreimageCache{S,T,Preimage,Storage}"] {
Preimage <: AbstractSet{S}
Storage <: Mapping{T,Preimage}: preimage for non injective maps
}
class InjectiveCache ["InjectiveCache{S,T,Storage}"] {
Storage <: Mapping{T,S}: inverse
}
}
PreimageCache <|-- TrivialCache : PreimageCache{S,T}
PreimageCache <|-- StoredPreimageCache : PreimageCache{S,T}
PreimageCache <|-- InjectiveCache : PreimageCache{S,T}
namespace Mappings {
class AbstractDict ["abstract AbstractDict{S,T}"]
class Mapping ["abstract Mapping{S,T}"] {
S: type of parts in source
T: type of parts in target
}
class VecMap ["VecMap{T,V}"] {
V <: AbstractVector{T}: container type
}
class DictMap ["DictMap{K,V,D}"] {
D <: AbstractDict{K,V}: container type
}
%% views are not included here
}
AbstractDict <|-- Mapping
Mapping <|-- VecMap : Mapping{Int,T}
Mapping <|-- DictMap : Mapping{K,V}
Loading
The text was updated successfully, but these errors were encountered:
While cleaning up some of my abandoned branches (namely #74, abandoned due to upstream work in GATLab that will make everything easier), I found a mmd diagram I made to help myself figure out how all the machinery in ACSets works. There's enough parameteric types in this package that it is somewhat daunting when one opens up a file, without some sort of guide as to how everything is organized. I am posting an issue here to see if it would be helpful to use it or something similar for a dev docs for users looking to contribute.
There are a few problems though:
What do other think?
The text was updated successfully, but these errors were encountered: