Coverage report: /home/runner/work/geb/geb/src/vampir/spec.lisp

KindCoveredAll%
expression3565 53.8
branch24 50.0
Key
Not instrumented
Conditionalized out
Executed
Not executed
 
Both branches taken
One branch taken
Neither branch taken
1
 (in-package :geb.vampir.spec)
2
 
3
 ;; Here we use the language of vampir to talk about the components
4
 
5
 ;; Adapted form
6
 ;; https://github.com/heliaxdev/ark-plonk/blob/plonk-ir/plonk-ir/src/plonk_ir.pest
7
 
8
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9
 ;; Sum Type Declarations
10
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
11
 
12
 ;; please remove these geb types later
13
 
14
 (deftype statement ()
15
   `(or alias pub constraint))
16
 
17
 (deftype constraint ()
18
   `(or application bind equality expression
19
        geb.extension.spec:common-sub-expression))
20
 
21
 ;; called base in the file
22
 ;; Values are called over a normal form!?!?!?
23
 (deftype expression ()
24
   `(or infix application normal-form tuple curly
25
        geb.extension.spec:common-sub-expression))
26
 
27
 (deftype normal-form ()
28
   `(or wire constant brackets))
29
 
30
 (deftype primitive ()
31
   `(or (eql :+) (eql :-) (eql :*) (eql :^) (eql :\\)
32
        (eql :%) (eql :/) (eql :|:|) (eql :^) (eql :\|)))
33
 
34
 (deftype constraint-list ()
35
   `(satisfies constraint-list))
36
 
37
 (deftype normal-form-list ()
38
   `(satisfies normal-form-list))
39
 
40
 (defun constraint-list (list)
41
   (and (listp list)
42
        (every (lambda (x) (typep x 'constraint)) list)))
43
 
44
 (defun normal-form-list (list)
45
   (and (listp list)
46
        (every (lambda (x) (typep x 'normal-form)) list)))
47
 
48
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
49
 ;; Statement Product Types
50
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
51
 
52
 (defclass mixins (geb.mixins:direct-pointwise-mixin) ())
53
 
54
 
55
 (defclass alias (mixins)
56
   ((name :initarg :name
57
          :type    (or symbol keyword)
58
          :accessor name
59
          :documentation "Name of the alias gate")
60
    (inputs :initarg :inputs
61
            :type    list
62
            :accessor inputs
63
            :documentation "the arguments to the circuit")
64
    ;; we should move this to an expression instead
65
    ;; See Issue #38 comment 1 on why.
66
    ;; (outputs :initarg :outputs
67
    ;;          :type    list
68
    ;;          :accessor outputs
69
    ;;          :documentation "The return wires of the circuit")
70
    ;; TODO :: layout types
71
    (body :initarg :body
72
          :accessor body
73
          :type     constraint-list))
74
   (:documentation "An alias gate in vamp-ir"))
75
 
76
 (defclass pub (mixins)
77
   ((wires :initarg :wires
78
           :type    list
79
           :accessor wires)))
80
 
81
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
82
 ;; Expression Product Types
83
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
84
 
85
 (defclass infix (mixins)
86
   ((op :initarg :op
87
        :accessor op
88
        :type     primitive
89
        :documentation "the alias we are calling")
90
    (lhs :initarg  :lhs
91
         :accessor lhs
92
         :type     expression
93
         :documentation "the argument to the left of the op")
94
    (rhs :initarg  :rhs
95
         :accessor rhs
96
         :type     expression
97
         :documentation "the argument to the right of the op")))
98
 
99
 (defclass application (mixins)
100
   ((func :initarg :func
101
          :accessor func
102
          :type     (or symbol keyword)
103
          :documentation "the alias we are calling")
104
    (arguments :initarg :arguments
105
               ;; I assume list of expressions?
106
               :type     cons
107
               :accessor arguments
108
               :documentation "The arguments in which the gate is called upon")))
109
 
110
 (defclass bind (mixins)
111
   ((names :initarg :names
112
           :accessor names
113
           :type     normal-form-list)
114
    (value :initarg :value
115
           :accessor value
116
           ;; can't be a constant however!
117
           :type     expression)))
118
 
119
 (defclass equality (mixins)
120
   ((lhs :initarg  :lhs
121
         :accessor lhs
122
         :type     expression
123
         :documentation "the argument to the left of the =")
124
    (rhs :initarg  :rhs
125
         :accessor rhs
126
         :type     expression
127
         :documentation "the argument to the rigth of the =")))
128
 
129
 (defclass tuple (mixins)
130
   ((wires :initarg :wires
131
           :type    list
132
           :accessor wires)))
133
 
134
 (defclass curly (mixins)
135
   ((value :initarg :value
136
           :accessor value
137
           :type expression
138
           :documentation "The wire argument inside the curly bracket")))
139
 
140
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
141
 ;; Normal Form Product Types
142
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
143
 
144
 (defclass wire (mixins)
145
   ((var :initarg :var
146
         :accessor var))
147
   (:documentation "A reference in vamp-ir"))
148
 
149
 (defclass constant (mixins)
150
   ((const :initarg :const
151
           :accessor const)))
152
 
153
 (defclass brackets (mixins)
154
   ()
155
   (:documentation "Brackets designating 0-bit integer"))
156
 
157
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
158
 ;; Alias
159
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
160
 
161
 (serapeum:-> make-alias
162
              (&key (:name (or symbol keyword)) (:inputs list) (:body constraint-list))
163
              alias)
164
 (defun make-alias (&key name inputs body)
165
   (values
166
    (make-instance 'alias :name name :inputs inputs :body body)))
167
 
168
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
169
 ;; Pub
170
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
171
 
172
 (defun make-pub (&key wires)
173
   (make-instance 'pub :wires wires))
174
 
175
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
176
 ;; Infix
177
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
178
 
179
 (defun make-infix (&key lhs op rhs)
180
   (make-instance 'infix :lhs lhs :op op :rhs rhs))
181
 
182
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
183
 ;; Application
184
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
185
 
186
 (defun make-application (&key func arguments)
187
   (make-instance 'application :func func :arguments arguments))
188
 
189
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
190
 ;; Bind
191
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
192
 
193
 (defun make-bind (&key names value)
194
   (make-instance 'bind :names names :value value))
195
 
196
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
197
 ;; Equality
198
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
199
 
200
 (defun make-equality (&key lhs rhs)
201
   (make-instance 'equality :lhs lhs :rhs rhs))
202
 
203
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
204
 ;; Wire
205
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
206
 
207
 (defun make-wire (&key var)
208
   (make-instance 'wire :var var))
209
 
210
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
211
 ;; Constant
212
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
213
 
214
 (defun make-constant (&key const)
215
   (make-instance 'constant :const const))
216
 
217
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
218
 ;; Tuples
219
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
220
 
221
 (defun make-tuples (&key wires)
222
   (make-instance 'tuple :wires wires))
223
 
224
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
225
 ;; Curly Brackets
226
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
227
 
228
 (defun make-curly (&key value)
229
   (make-instance 'curly :value value))
230
 
231
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
232
 ;; Brackets
233
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
234
 
235
 (defun make-brackets ()
236
   (make-instance 'brackets))