
from typing import List, Tuple, TypedDict as Dict


# class Dict(dict):
#     def __getattr__(self, attr): ...

class Node:
    tag: ...
    loc: Tuple[float]

class Knot:
    loc: ...
    wgt: ...

#     block():
#     
Nodes = dict[int, tuple[float,float]]
Cells = dict[int, tuple[int]]
Types = List[dict [str, str]]

class Block(Dict):
    nodes: Nodes
    inner: Nodes 
    outer: Nodes 

    types: Types
    cells: Cells
#   types: Types

class Basis(Dict): ...

class Shape:
    nodes:  Nodes
    inner:  Nodes
    outer:  Nodes
    order:  int
    terms:  list
    basis:  dict
    gauss: "Gauss"

    sides: tuple[int]
    order: int
    n : int

    def shape(self) -> Basis: ...
    def value(self): ...
    def deriv(self): ...
    def nabla(self): ...
    def print(self): ...

class Child(Shape):
    def coord(self): ...
    def jacsx(self): ...
    def jacxs(self): ...
    def detsx(self): ...
    def detxs(self): ...

class Gauss(Dict): ...
#   knots: ...

#   point: ...
#   scale: ...
#   areas: ...
#   zeros: ...
#   coord: ...

class Brick: ...
class Angle: ...
class Patch: ... # A field of gauss knots (aka fibers)
class Fiber: ...
class Layer: ...


