Skip to content

Gci paper#123

Merged
pratzl merged 15 commits intomainfrom
gci_paper
Mar 12, 2026
Merged

Gci paper#123
pratzl merged 15 commits intomainfrom
gci_paper

Conversation

@pratzl
Copy link
Contributor

@pratzl pratzl commented Mar 12, 2026

Update to current graph-v3 state

pratzl added 15 commits March 12, 2026 00:29
Strategy document for updating D3130 Container Interface paper to match
graph-v3 implementation. All 8 open questions resolved:
- Q1: Hybrid exposition-only convention for descriptors
- Q2: Pass descriptors by value (full audit of 17 occurrences)
- Q3: Drop trait gate on edge<G,E>, no edge_list descriptors/views
- Q4: Keep adjacency matrix traits/concepts
- Q5: raw_vertex_id_t exposition-only, vertex_id_store_t normative
- Q6: Separate namespaces (std::graph::edge_list)
- Q7: vertex_property_map in GCI (D3130)
- Q8: source_id mandatory for descriptor-based edges
- Delete concepts_edges_before.hpp and concepts_basic_adj_list.hpp
- Rewrite concepts_edges.hpp: single edge<G,E> concept (no trait gate, Q3)
- Rewrite concepts_target_edge_range.hpp: out_edge_range + in_edge_range
- Rewrite concepts_vertex_range.hpp: vertex<G,V>, vertex_range, index_vertex_range, mapped_vertex_range
- Rewrite concepts_adj_list.hpp: adjacency_list, bidirectional, index, mapped variants
- Rewrite descriptor.hpp: vertex_descriptor + edge_descriptor (exposition-only internals, Q1)
- Rewrite descriptor_view.hpp: vertex_descriptor_view + edge_descriptor_view
- Rewrite edgelist_concepts.hpp: 2-arg concepts in std::graph::edge_list namespace
- Rewrite edgelist_types.hpp: 2-arg type aliases, add raw_vertex_id_t, remove edge_reference_t
- Add descriptor_traits.hpp: is_vertex_descriptor, is_edge_descriptor, is_descriptor
- Update container_interface.tex: add lstinputlisting for descriptor.hpp and descriptor_traits.hpp
- Add gci_update_plan.md implementation plan
- Traits table: update has_contains_edge to <G,V>, remove unordered/ordered edge
  traits, add bidirectional query traits (has_in_degree, has_find_in_edge,
  has_contains_in_edge), add compound traits (has_basic_queries, has_full_queries),
  note adjacency_matrix not yet in reference implementation
- Type alias table: already updated in Phase A amend (remove graph/vertex/edge
  _reference_t, add vertex_id_store_t, raw-vertex-id-type, out_edge_*/in_edge_*
  types, backward-compat aliases)
- Graph table: rename has_edge(g)->has_edges(g), update default impl to use out_edges
- Vertex table: rename edges->out_edges, degree->out_degree; add in_edges, in_degree;
  note backward-compat aliases (edges, degree); update vertex_edge_range_t->out_edge_range_t
- Edge table: rename find_vertex_edge->find_out_edge, contains_edge->contains_out_edge;
  make source_id mandatory for descriptor-based edges (not optional); remove optional
  source_id separator; add find_in_edge, contains_in_edge rows; note backward-compat aliases
- Edgelist table: 1-arg->2-arg CPOs (target_id(e)->target_id(el,uv), etc.);
  update contains_edge lambda to use 2-arg forms; rename has_edge->has_edges
- Update prose references: edges(g,u)->out_edges(g,u), source_id(e)->source_id(el,uv), etc.
- Fix LaTeX errors from Phase B: \textit inside \tcode, vertex_t<G>{} braces
- Concepts intro: remove 'sourced' qualifier, add 'mapped' and 'bidirectional'
- Edge Concepts: single edge<G,E> concept; explain removal of targeted/sourced split;
  simplify return-type rationale; keep precedent note about sized_range
- Edge Range Concepts: explain out_edge_range + in_edge_range semantics
- Vertex Concepts: describe vertex<G,V>, index_vertex_range, mapped_vertex_range
- Adjacency List Concepts: list all 6 concepts and their axes; explain removal
  of basic_*/sourced_* variants due to descriptor design
- Edgelist Concepts: explain 2-arg form and three concept levels
…cture

- Add 'Why Descriptors?' motivation with comparison table (raw iterators vs descriptors)
- Add implicit vertex support explanation (index-based descriptors work without
  materialised vertex storage)
- Add automatic pattern recognition paragraph (random-access, associative, edge patterns)
- Replace old monolithic descriptor prose with split architecture description:
  vertex_descriptor<VertexIter> and edge_descriptor<EdgeIter,VertexIter,EdgeDirection>
- Fix inner_value() -> underlying_value(c) / inner_value(c) (container parameter required)
- Add pass-by-value convention paragraph (descriptors trivially copyable, const& only
  in requires clauses)
- Remove stale itemize list of descriptor properties (now covered in prose)
- Keep all three lstinputlisting calls: descriptor.hpp, descriptor_traits.hpp,
  descriptor_view.hpp
…patterns

- Remove \phil note from Namespace subsection
- Fix intro prose CPO args: source_id(el,e) -> source_id(el,uv) etc.
- Types table: remove edge_reference_t<EL>; add raw-vertex-id-type (exposition-only);
  update vertex_id_t definition to use source_id(el,uv) (consistent with edgelist_types.hpp)
- Pattern section: rename edge_info -> edge_data throughout (4 occurrences)
- Pattern section: add pair<integral,integral> pattern
- Pattern section: add edge_data reference variants:
    edge_data<VId,true,E&,void> and edge_data<VId,true,E&,EV>
- Add vertex_data/edge_data/neighbor_data struct families with specialization tables
- Add copyable_vertex_t/copyable_edge_t/copyable_neighbor_t helper alias table
- Add Value Function Concepts subsection: vertex_value_function, edge_value_function
- Add Vertex Property Map subsection: vertex_property_map<G,T> type alias,
  make_vertex_property_map (eager+lazy), vertex_property_map_contains,
  vertex_property_map_get
- Fix: use L{8cm} column spec in copyable_types table (arydshln requires at least one L column)
- Fix: remove texcl-interpreted comment from vertex_property_map lstlisting
…paces

- GCI intro: introduce both namespaces by name; explain that adj_list is re-exported
  to graph:: but edge_list is not (vertex_id_t conflict)
- Adjacency List Interface: add Namespace subsection explaining graph::adj_list,
  re-export to graph::, and when to use the qualified form
- Edgelist Interface: expand Namespace subsection to explain the peer relationship,
  contrast the two ADTs, and note the shared CPOs (source_id, target_id, edge_value)
- Traits table: fix has_degree comment degree->out_degree, has_find_vertex_edge
  comment find_vertex_edge->find_out_edge, has_contains_edge comment
  contains_edge->contains_out_edge (adj_list CPO names)
- Partition section: edges(g,uid,pid)/edges(g,u,pid) -> out_edges(g,uid,pid)/
  out_edges(g,u,pid)
- Revision history: add r4 entry summarising all descriptor, concept, CPO,
  type alias, data struct, namespace and edgelist changes from Phases A-H
- tex/conventions.tex: vertex_reference_t<G> -> vertex_t<G> (descriptor row);
  edge_reference_t<G> -> edge_t<G> (edge descriptor row);
  vertex_info -> vertex_data (VProj description);
  edge_info -> edge_data (EProj description)
- tex/specification.tex: vertex_reference_t<G> -> vertex_t<G> in
  vertex_value(), has_degree, has_find_vertex_edge, adjacency_list,
  incidence(), neighbors() (6 occurrences)
- D3128_Algorithms/tex/algorithms.tex: edge_reference_t<G> -> edge_t<G>
  in basic_edge_weight_function and edge_weight_function concepts (2 occurrences)
- D3128_Algorithms and D3130_Container_Interface both build cleanly
@pratzl pratzl merged commit 4365230 into main Mar 12, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant