updated hexa and docforge docs

This commit is contained in:
2026-09-15 16:53:19 +05:30
parent 27f76c7831
commit b1f5ce092a
78 changed files with 2653 additions and 54095 deletions

View File

@@ -9,7 +9,7 @@
<link rel="prev" href="../philosophy/">
<link rel="prev" href="..">
<link rel="next" href="../container/">
@@ -246,110 +246,6 @@
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2" >
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="">
<span class="md-ellipsis">
Concepts
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Concepts
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../design/" class="md-nav__link">
<span class="md-ellipsis">
hexa — Design (extraction pipeline, Axis/Icici)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../philosophy/" class="md-nav__link">
<span class="md-ellipsis">
hexa — Philosophy
</span>
</a>
</li>
</ul>
</nav>
</li>
@@ -372,10 +268,10 @@
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="">
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="">
@@ -388,8 +284,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_3">
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Shared Model
</label>
@@ -468,6 +364,15 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#hexa.model--notes" class="md-nav__link">
<span class="md-ellipsis">
Notes
</span>
</a>
</li>
<li class="md-nav__item">
@@ -499,15 +404,6 @@
<nav class="md-nav" aria-label="PortNode">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#hexa.model.PortNode--parameters" class="md-nav__link">
<span class="md-ellipsis">
Parameters
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#hexa.model.PortNode-functions" class="md-nav__link">
<span class="md-ellipsis">
@@ -607,10 +503,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="">
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="">
@@ -623,8 +519,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Container
</label>
@@ -688,10 +584,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_5" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="">
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="">
@@ -704,8 +600,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Parsing
</label>
@@ -792,10 +688,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_6" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_5" >
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="">
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="">
@@ -808,8 +704,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Generation
</label>
@@ -894,10 +790,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_6" >
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="">
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="">
@@ -910,8 +806,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Verification
</label>
@@ -973,10 +869,10 @@
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_8" >
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="">
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="">
@@ -989,8 +885,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_8">
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
CLI
</label>
@@ -1069,6 +965,15 @@
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#hexa.model--notes" class="md-nav__link">
<span class="md-ellipsis">
Notes
</span>
</a>
</li>
<li class="md-nav__item">
@@ -1100,15 +1005,6 @@
<nav class="md-nav" aria-label="PortNode">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#hexa.model.PortNode--parameters" class="md-nav__link">
<span class="md-ellipsis">
Parameters
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#hexa.model.PortNode-functions" class="md-nav__link">
<span class="md-ellipsis">
@@ -1200,8 +1096,12 @@
<h3 id="hexa.model--summary">Summary</h3>
<p>Shared neutral model for hexa port trees.</p>
<p>All utilities (<code>parse_yaml</code>, <code>generate_abc</code>, <code>parse_abc</code>,
<code>generate_yaml</code>, <code>check_matches</code>) serialize through this single model.
It is NOT tied to any sample — any port tree fits.</p>
<code>generate_yaml</code>, <code>check_matches</code>) serialize through this single model.</p>
<hr />
<h3 id="hexa.model--notes">Notes</h3>
<ul>
<li>The model is NOT tied to any sample — any port tree fits.</li>
</ul>
@@ -1244,6 +1144,53 @@ It is NOT tied to any sample — any port tree fits.</p>
<p>Specification of a single abstract method.</p>
<p><span class="doc-section-title">Attributes:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code><span title="hexa.model.MethodSpec.name">name</span></code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>Name of the method.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="hexa.model.MethodSpec.args">args</span></code></td>
<td>
<code>list[str]</code>
</td>
<td>
<div class="doc-md-description">
<p>Positional parameter names.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="hexa.model.MethodSpec.kwargs">kwargs</span></code></td>
<td>
<code>dict[str, str]</code>
</td>
<td>
<div class="doc-md-description">
<p>Keyword-only parameter names mapped to their type expressions.</p>
</div>
</td>
</tr>
</tbody>
</table>
<div class="doc doc-children">
@@ -1298,24 +1245,94 @@ It is NOT tied to any sample — any port tree fits.</p>
<p>A node in the hexa port tree.</p>
<h6 id="hexa.model.PortNode--parameters">Parameters</h6>
<p>name : str
Slot name, e.g. <code>"parser"</code>, <code>"amount_balance"</code>.
kind : str
One of <code>"leaf"</code>, <code>"port"</code>, or <code>"parent"</code>.
- <code>"leaf"</code>: no children (e.g. <code>NumberPort</code>)
- <code>"port"</code>: has children (e.g. <code>TransactionParserPort</code>)
- <code>"parent"</code>: the root of the tree (e.g. <code>ExtractionPipeline</code>)
port_cls : str
ABC class name that gives this port its shape, e.g.
<code>"TransactionParserPort"</code>. Every port has a concrete typed shape.
attributes : dict[str, ConfigValue]
Annotated attributes: <code>name -&gt; type_expr</code> for scalars, or a nested
<code>dict</code> of sub-attributes (a struct) for grouped/structured values.
children : list[PortNode]
Nested port slots.
methods : dict[str, MethodSpec]
Abstract methods keyed by method name.</p>
<p>Each node is a leaf (no children), a port (has nested port slots), or the
parent root of the tree. Every node carries a concrete typed shape derived
from an ABC class name.</p>
<p><span class="doc-section-title">Attributes:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code><span title="hexa.model.PortNode.name">name</span></code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>Slot name, e.g. <code>"parser"</code>, <code>"amount_balance"</code>.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="hexa.model.PortNode.port_cls">port_cls</span></code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>ABC class name that gives this port its shape, e.g.
<code>"TransactionParserPort"</code>. Every port has a concrete typed shape.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="hexa.model.PortNode.kind">kind</span></code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>One of <code>"leaf"</code>, <code>"port"</code>, or <code>"parent"</code>.
- <code>"leaf"</code>: no children (e.g. <code>NumberPort</code>)
- <code>"port"</code>: has children (e.g. <code>TransactionParserPort</code>)
- <code>"parent"</code>: the root of the tree (e.g. <code>ExtractionPipeline</code>)</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="hexa.model.PortNode.attributes">attributes</span></code></td>
<td>
<code>dict[str, <span title="hexa.model.ConfigValue">ConfigValue</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Annotated attributes: <code>name -&gt; type_expr</code> for scalars, or a
nested <code>dict</code> of sub-attributes (a struct) for grouped values.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="hexa.model.PortNode.children">children</span></code></td>
<td>
<code>list[<a class="autorefs autorefs-internal" title="hexa.model.PortNode" href="#hexa.model.PortNode">PortNode</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Nested port slots.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="hexa.model.PortNode.methods">methods</span></code></td>
<td>
<code>dict[str, <a class="autorefs autorefs-internal" title="hexa.model.MethodSpec" href="#hexa.model.MethodSpec">MethodSpec</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Abstract methods keyed by method name.</p>
</div>
</td>
</tr>
</tbody>
</table>
@@ -1346,6 +1363,74 @@ methods : dict[str, MethodSpec]
<p>Return a list of human-readable difference strings.</p>
<p>An empty list means the trees are equal.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>other</code></td>
<td>
<code><a class="autorefs autorefs-internal" title="hexa.model.PortNode" href="#hexa.model.PortNode">PortNode</a></code>
</td>
<td>
<div class="doc-md-description">
<p>Tree to compare against.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td><code>path</code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>Path prefix used when recursing into nested nodes; defaults to
the root path.</p>
</div>
</td>
<td>
<code>&#39;&#39;</code>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>list[str]</code>
</td>
<td>
<div class="doc-md-description">
<p>list[str]:
Human-readable difference strings, one per discrepancy.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
@@ -1365,6 +1450,59 @@ methods : dict[str, MethodSpec]
<p>Find a direct child by slot name.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>name</code></td>
<td>
<code>str</code>
</td>
<td>
<div class="doc-md-description">
<p>Slot name of the child to look up.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><a class="autorefs autorefs-internal" title="hexa.model.PortNode" href="#hexa.model.PortNode">PortNode</a> | None</code>
</td>
<td>
<div class="doc-md-description">
<p>PortNode | None:
The matching child node, or <code>None</code> if no child has that name.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
@@ -1384,6 +1522,30 @@ methods : dict[str, MethodSpec]
<p>Return all nodes in depth-first order (self first).</p>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>list[<a class="autorefs autorefs-internal" title="hexa.model.PortNode" href="#hexa.model.PortNode">PortNode</a>]</code>
</td>
<td>
<div class="doc-md-description">
<p>list[PortNode]:
All nodes of the tree, self first, depth-first.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>