@@ -48,8 +48,41 @@ def validate_shapes(
48
48
specification : dict [str , ShapeSpec | "Desc" ],
49
49
actual : dict [str , ShapeSpec | "Desc" ],
50
50
* ,
51
- broadcast = False ,
52
- ) -> bool :
51
+ broadcast : bool = False ,
52
+ ) -> None :
53
+ """Validate specified shape relationships against a provided set of shapes.
54
+
55
+ Shapes provided are tuples of int | str. If a specification calls for an int,
56
+ the exact size is expected.
57
+ If it is a str, it must be a single capital letter optionally followed by ``+``
58
+ or ``-`` an integer value.
59
+ The same letter used in the specification must represent the same value in all
60
+ appearances. The value may, however, be a variable (with an offset) in the
61
+ actual shapes (which does not need to have the same letter).
62
+
63
+ Shapes may be provided as raw tuples or as ``Desc`` objects.
64
+
65
+ Parameters
66
+ ----------
67
+ specification: dict[str, ShapeSpec | "Desc"]
68
+ The desired shape relationships
69
+ actual: dict[str, ShapeSpec | "Desc"]
70
+ The shapes to test for compliance
71
+
72
+ Keyword Parameters
73
+ ------------------
74
+ broadcast: bool
75
+ Whether to allow broadcasted shapes to pass (i.e. actual shapes with a ``1``
76
+ will not cause exceptions regardless of what the specified shape value is)
77
+
78
+ Raises
79
+ ------
80
+ KeyError:
81
+ If a required field from the specification is missing in the provided actual
82
+ values.
83
+ ValueError:
84
+ If shapes are incompatible in any other way
85
+ """
53
86
specvars : dict [str , int | tuple [str , int ]] = {}
54
87
for fieldname in specification :
55
88
spec = specification [fieldname ]
0 commit comments