guppylang-internals 0.25.0__py3-none-any.whl → 0.26.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- guppylang_internals/__init__.py +1 -1
- guppylang_internals/cfg/builder.py +17 -2
- guppylang_internals/cfg/cfg.py +3 -0
- guppylang_internals/checker/cfg_checker.py +6 -0
- guppylang_internals/checker/core.py +1 -2
- guppylang_internals/checker/errors/wasm.py +7 -4
- guppylang_internals/checker/expr_checker.py +13 -8
- guppylang_internals/checker/func_checker.py +17 -13
- guppylang_internals/checker/linearity_checker.py +2 -10
- guppylang_internals/checker/modifier_checker.py +6 -2
- guppylang_internals/checker/unitary_checker.py +132 -0
- guppylang_internals/compiler/cfg_compiler.py +7 -6
- guppylang_internals/compiler/core.py +5 -5
- guppylang_internals/compiler/expr_compiler.py +42 -73
- guppylang_internals/compiler/modifier_compiler.py +2 -0
- guppylang_internals/decorator.py +86 -7
- guppylang_internals/definition/custom.py +4 -0
- guppylang_internals/definition/declaration.py +6 -2
- guppylang_internals/definition/function.py +12 -2
- guppylang_internals/definition/pytket_circuits.py +1 -0
- guppylang_internals/definition/struct.py +6 -3
- guppylang_internals/definition/wasm.py +42 -10
- guppylang_internals/engine.py +9 -3
- guppylang_internals/nodes.py +23 -24
- guppylang_internals/std/_internal/checker.py +13 -108
- guppylang_internals/std/_internal/compiler/array.py +1 -1
- guppylang_internals/std/_internal/compiler/list.py +1 -1
- guppylang_internals/std/_internal/compiler/platform.py +153 -0
- guppylang_internals/std/_internal/compiler/prelude.py +12 -4
- guppylang_internals/std/_internal/compiler/tket_exts.py +3 -4
- guppylang_internals/std/_internal/debug.py +18 -9
- guppylang_internals/std/_internal/util.py +1 -1
- guppylang_internals/tracing/object.py +10 -0
- guppylang_internals/tys/errors.py +23 -1
- guppylang_internals/tys/parsing.py +3 -3
- guppylang_internals/tys/printing.py +2 -8
- guppylang_internals/tys/qubit.py +37 -2
- guppylang_internals/tys/ty.py +60 -64
- guppylang_internals/wasm_util.py +129 -0
- {guppylang_internals-0.25.0.dist-info → guppylang_internals-0.26.0.dist-info}/METADATA +4 -3
- {guppylang_internals-0.25.0.dist-info → guppylang_internals-0.26.0.dist-info}/RECORD +43 -40
- {guppylang_internals-0.25.0.dist-info → guppylang_internals-0.26.0.dist-info}/WHEEL +1 -1
- {guppylang_internals-0.25.0.dist-info → guppylang_internals-0.26.0.dist-info}/licenses/LICENCE +0 -0
|
@@ -11,7 +11,6 @@ from guppylang_internals.tys.ty import (
|
|
|
11
11
|
NumericType,
|
|
12
12
|
OpaqueType,
|
|
13
13
|
StructType,
|
|
14
|
-
SumType,
|
|
15
14
|
TupleType,
|
|
16
15
|
Type,
|
|
17
16
|
)
|
|
@@ -122,11 +121,6 @@ class TypePrinter:
|
|
|
122
121
|
args = ", ".join(self._visit(arg, True) for arg in ty.args)
|
|
123
122
|
return f"({args})"
|
|
124
123
|
|
|
125
|
-
@_visit.register
|
|
126
|
-
def _visit_SumType(self, ty: SumType, inside_row: bool) -> str:
|
|
127
|
-
args = ", ".join(self._visit(arg, True) for arg in ty.args)
|
|
128
|
-
return f"Sum[{args}]"
|
|
129
|
-
|
|
130
124
|
@_visit.register
|
|
131
125
|
def _visit_NoneType(self, ty: NoneType, inside_row: bool) -> str:
|
|
132
126
|
return "None"
|
|
@@ -168,7 +162,7 @@ def signature_to_str(name: str, sig: FunctionType) -> str:
|
|
|
168
162
|
assert sig.input_names is not None
|
|
169
163
|
s = f"def {name}("
|
|
170
164
|
s += ", ".join(
|
|
171
|
-
f"{name}: {inp.ty}{TypePrinter._print_flags(inp.flags)}"
|
|
172
|
-
for
|
|
165
|
+
f"{inp.name}: {inp.ty}{TypePrinter._print_flags(inp.flags)}"
|
|
166
|
+
for inp in sig.inputs
|
|
173
167
|
)
|
|
174
168
|
return s + ") -> " + str(sig.output)
|
guppylang_internals/tys/qubit.py
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import functools
|
|
2
|
-
from typing import cast
|
|
2
|
+
from typing import Any, cast
|
|
3
3
|
|
|
4
4
|
from guppylang_internals.definition.ty import TypeDef
|
|
5
|
-
from guppylang_internals.tys.
|
|
5
|
+
from guppylang_internals.tys.arg import TypeArg
|
|
6
|
+
from guppylang_internals.tys.common import Visitor
|
|
7
|
+
from guppylang_internals.tys.ty import OpaqueType, Type
|
|
6
8
|
|
|
7
9
|
|
|
8
10
|
@functools.cache
|
|
@@ -25,3 +27,36 @@ def is_qubit_ty(ty: Type) -> bool:
|
|
|
25
27
|
before qubit types are registered.
|
|
26
28
|
"""
|
|
27
29
|
return ty == qubit_ty()
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class QubitFinder(Visitor):
|
|
33
|
+
"""Type visitor that checks if a type contains the qubit type."""
|
|
34
|
+
|
|
35
|
+
class FoundFlag(Exception):
|
|
36
|
+
pass
|
|
37
|
+
|
|
38
|
+
@functools.singledispatchmethod
|
|
39
|
+
def visit(self, ty: Any) -> bool: # type: ignore[override]
|
|
40
|
+
return False
|
|
41
|
+
|
|
42
|
+
@visit.register
|
|
43
|
+
def _visit_OpaqueType(self, ty: OpaqueType) -> bool:
|
|
44
|
+
if is_qubit_ty(ty):
|
|
45
|
+
raise self.FoundFlag
|
|
46
|
+
return False
|
|
47
|
+
|
|
48
|
+
@visit.register
|
|
49
|
+
def _visit_TypeArg(self, arg: TypeArg) -> bool:
|
|
50
|
+
arg.ty.visit(self)
|
|
51
|
+
return True
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def contain_qubit_ty(ty: Type) -> bool:
|
|
55
|
+
"""Checks if the given type contains the qubit type."""
|
|
56
|
+
finder = QubitFinder()
|
|
57
|
+
try:
|
|
58
|
+
ty.visit(finder)
|
|
59
|
+
except QubitFinder.FoundFlag:
|
|
60
|
+
return True
|
|
61
|
+
else:
|
|
62
|
+
return False
|
guppylang_internals/tys/ty.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from abc import ABC, abstractmethod
|
|
2
2
|
from collections.abc import Sequence
|
|
3
|
-
from dataclasses import dataclass, field
|
|
3
|
+
from dataclasses import dataclass, field, replace
|
|
4
4
|
from enum import Enum, Flag, auto
|
|
5
5
|
from functools import cached_property, total_ordering
|
|
6
6
|
from typing import TYPE_CHECKING, ClassVar, TypeAlias, cast
|
|
@@ -369,6 +369,21 @@ class InputFlags(Flag):
|
|
|
369
369
|
Comptime = auto()
|
|
370
370
|
|
|
371
371
|
|
|
372
|
+
class UnitaryFlags(Flag):
|
|
373
|
+
"""Flags that can be set on functions to indicate their unitary properties.
|
|
374
|
+
|
|
375
|
+
The flags indicate under which conditions a function can be used
|
|
376
|
+
in a unitary context.
|
|
377
|
+
"""
|
|
378
|
+
|
|
379
|
+
NoFlags = 0
|
|
380
|
+
Control = auto()
|
|
381
|
+
Dagger = auto()
|
|
382
|
+
Power = auto()
|
|
383
|
+
|
|
384
|
+
Unitary = Control | Dagger | Power
|
|
385
|
+
|
|
386
|
+
|
|
372
387
|
@dataclass(frozen=True)
|
|
373
388
|
class FuncInput:
|
|
374
389
|
"""A single input of a function type."""
|
|
@@ -376,6 +391,10 @@ class FuncInput:
|
|
|
376
391
|
ty: "Type"
|
|
377
392
|
flags: InputFlags
|
|
378
393
|
|
|
394
|
+
#: Name of this input, or `None` if it is an unnamed argument (e.g. inside a
|
|
395
|
+
#: `Callable`). We use `compare=False` because names are not visible to the caller.
|
|
396
|
+
name: str | None = field(default=None, compare=False)
|
|
397
|
+
|
|
379
398
|
|
|
380
399
|
@dataclass(frozen=True, init=False)
|
|
381
400
|
class FunctionType(ParametrizedTypeBase):
|
|
@@ -384,7 +403,6 @@ class FunctionType(ParametrizedTypeBase):
|
|
|
384
403
|
inputs: Sequence[FuncInput]
|
|
385
404
|
output: "Type"
|
|
386
405
|
params: Sequence[Parameter]
|
|
387
|
-
input_names: Sequence[str] | None
|
|
388
406
|
comptime_args: Sequence[ConstArg]
|
|
389
407
|
|
|
390
408
|
args: Sequence[Argument] = field(init=False)
|
|
@@ -394,13 +412,15 @@ class FunctionType(ParametrizedTypeBase):
|
|
|
394
412
|
intrinsically_droppable: bool = field(default=True, init=True)
|
|
395
413
|
hugr_bound: ht.TypeBound = field(default=ht.TypeBound.Copyable, init=False)
|
|
396
414
|
|
|
415
|
+
unitary_flags: UnitaryFlags = field(default=UnitaryFlags.NoFlags, init=True)
|
|
416
|
+
|
|
397
417
|
def __init__(
|
|
398
418
|
self,
|
|
399
419
|
inputs: Sequence[FuncInput],
|
|
400
420
|
output: "Type",
|
|
401
|
-
input_names: Sequence[str] | None = None,
|
|
402
421
|
params: Sequence[Parameter] | None = None,
|
|
403
422
|
comptime_args: Sequence[ConstArg] | None = None,
|
|
423
|
+
unitary_flags: UnitaryFlags = UnitaryFlags.NoFlags,
|
|
404
424
|
) -> None:
|
|
405
425
|
# We need a custom __init__ to set the args
|
|
406
426
|
args: list[Argument] = [TypeArg(inp.ty) for inp in inputs]
|
|
@@ -416,12 +436,19 @@ class FunctionType(ParametrizedTypeBase):
|
|
|
416
436
|
]
|
|
417
437
|
args += comptime_args
|
|
418
438
|
|
|
439
|
+
# Either all inputs must have unique names, or none of them have names
|
|
440
|
+
names = {inp.name for inp in inputs if inp.name is not None}
|
|
441
|
+
if len(names) not in (0, len(inputs)):
|
|
442
|
+
raise InternalGuppyError(
|
|
443
|
+
"Tried to construct FunctionType with invalid input names"
|
|
444
|
+
)
|
|
445
|
+
|
|
419
446
|
object.__setattr__(self, "args", args)
|
|
420
447
|
object.__setattr__(self, "comptime_args", comptime_args)
|
|
421
448
|
object.__setattr__(self, "inputs", inputs)
|
|
422
449
|
object.__setattr__(self, "output", output)
|
|
423
|
-
object.__setattr__(self, "input_names", input_names or [])
|
|
424
450
|
object.__setattr__(self, "params", params)
|
|
451
|
+
object.__setattr__(self, "unitary_flags", unitary_flags)
|
|
425
452
|
|
|
426
453
|
@property
|
|
427
454
|
def parametrized(self) -> bool:
|
|
@@ -436,6 +463,16 @@ class FunctionType(ParametrizedTypeBase):
|
|
|
436
463
|
return set()
|
|
437
464
|
return super().bound_vars
|
|
438
465
|
|
|
466
|
+
@cached_property
|
|
467
|
+
def input_names(self) -> Sequence[str] | None:
|
|
468
|
+
"""Names of all inputs or `None` if there are unnamed inputs."""
|
|
469
|
+
names: list[str] = []
|
|
470
|
+
for inp in self.inputs:
|
|
471
|
+
if inp.name is None:
|
|
472
|
+
return None
|
|
473
|
+
names.append(inp.name)
|
|
474
|
+
return names
|
|
475
|
+
|
|
439
476
|
def cast(self) -> "Type":
|
|
440
477
|
"""Casts an implementor of `TypeBase` into a `Type`."""
|
|
441
478
|
return self
|
|
@@ -494,12 +531,8 @@ class FunctionType(ParametrizedTypeBase):
|
|
|
494
531
|
def transform(self, transformer: Transformer) -> "Type":
|
|
495
532
|
"""Accepts a transformer on this type."""
|
|
496
533
|
return transformer.transform(self) or FunctionType(
|
|
497
|
-
[
|
|
498
|
-
FuncInput(inp.ty.transform(transformer), inp.flags)
|
|
499
|
-
for inp in self.inputs
|
|
500
|
-
],
|
|
534
|
+
[replace(inp, ty=inp.ty.transform(transformer)) for inp in self.inputs],
|
|
501
535
|
self.output.transform(transformer),
|
|
502
|
-
self.input_names,
|
|
503
536
|
self.params,
|
|
504
537
|
)
|
|
505
538
|
|
|
@@ -529,9 +562,8 @@ class FunctionType(ParametrizedTypeBase):
|
|
|
529
562
|
|
|
530
563
|
inst = Instantiator(full_inst)
|
|
531
564
|
return FunctionType(
|
|
532
|
-
[
|
|
565
|
+
[replace(inp, ty=inp.ty.transform(inst)) for inp in self.inputs],
|
|
533
566
|
self.output.transform(inst),
|
|
534
|
-
self.input_names,
|
|
535
567
|
remaining_params,
|
|
536
568
|
# Comptime type arguments also need to be instantiated
|
|
537
569
|
comptime_args=[
|
|
@@ -548,6 +580,18 @@ class FunctionType(ParametrizedTypeBase):
|
|
|
548
580
|
exs = [param.to_existential() for param in self.params]
|
|
549
581
|
return self.instantiate([arg for arg, _ in exs]), [var for _, var in exs]
|
|
550
582
|
|
|
583
|
+
def with_unitary_flags(self, flags: UnitaryFlags) -> "FunctionType":
|
|
584
|
+
"""Returns a copy of this function type with the specified unitary flags."""
|
|
585
|
+
# N.B. we can't use `dataclasses.replace` here since `FunctionType` has a custom
|
|
586
|
+
# constructor
|
|
587
|
+
return FunctionType(
|
|
588
|
+
self.inputs,
|
|
589
|
+
self.output,
|
|
590
|
+
self.params,
|
|
591
|
+
self.comptime_args,
|
|
592
|
+
flags,
|
|
593
|
+
)
|
|
594
|
+
|
|
551
595
|
|
|
552
596
|
@dataclass(frozen=True, init=False)
|
|
553
597
|
class TupleType(ParametrizedTypeBase):
|
|
@@ -592,53 +636,6 @@ class TupleType(ParametrizedTypeBase):
|
|
|
592
636
|
)
|
|
593
637
|
|
|
594
638
|
|
|
595
|
-
@dataclass(frozen=True, init=False)
|
|
596
|
-
class SumType(ParametrizedTypeBase):
|
|
597
|
-
"""Type of sums.
|
|
598
|
-
|
|
599
|
-
Note that this type is only used internally when constructing the Hugr. Users cannot
|
|
600
|
-
write down this type.
|
|
601
|
-
"""
|
|
602
|
-
|
|
603
|
-
element_types: Sequence["Type"]
|
|
604
|
-
|
|
605
|
-
def __init__(self, element_types: Sequence["Type"]) -> None:
|
|
606
|
-
# We need a custom __init__ to set the args
|
|
607
|
-
args = [TypeArg(ty) for ty in element_types]
|
|
608
|
-
object.__setattr__(self, "args", args)
|
|
609
|
-
object.__setattr__(self, "element_types", element_types)
|
|
610
|
-
|
|
611
|
-
@property
|
|
612
|
-
def intrinsically_copyable(self) -> bool:
|
|
613
|
-
"""Whether objects of this type can be implicitly copied."""
|
|
614
|
-
return True
|
|
615
|
-
|
|
616
|
-
@property
|
|
617
|
-
def intrinsically_droppable(self) -> bool:
|
|
618
|
-
"""Whether objects of this type can be dropped."""
|
|
619
|
-
return True
|
|
620
|
-
|
|
621
|
-
def cast(self) -> "Type":
|
|
622
|
-
"""Casts an implementor of `TypeBase` into a `Type`."""
|
|
623
|
-
return self
|
|
624
|
-
|
|
625
|
-
def to_hugr(self, ctx: ToHugrContext) -> ht.Sum:
|
|
626
|
-
"""Computes the Hugr representation of the type."""
|
|
627
|
-
rows = [type_to_row(ty) for ty in self.element_types]
|
|
628
|
-
if all(len(row) == 0 for row in rows):
|
|
629
|
-
return ht.UnitSum(size=len(rows))
|
|
630
|
-
elif len(rows) == 1:
|
|
631
|
-
return ht.Tuple(*row_to_hugr(rows[0], ctx))
|
|
632
|
-
else:
|
|
633
|
-
return ht.Sum(variant_rows=rows_to_hugr(rows, ctx))
|
|
634
|
-
|
|
635
|
-
def transform(self, transformer: Transformer) -> "Type":
|
|
636
|
-
"""Accepts a transformer on this type."""
|
|
637
|
-
return transformer.transform(self) or SumType(
|
|
638
|
-
[ty.transform(transformer) for ty in self.element_types]
|
|
639
|
-
)
|
|
640
|
-
|
|
641
|
-
|
|
642
639
|
@dataclass(frozen=True)
|
|
643
640
|
class OpaqueType(ParametrizedTypeBase):
|
|
644
641
|
"""Type that is directly backed by a Hugr opaque type.
|
|
@@ -727,9 +724,8 @@ class StructType(ParametrizedTypeBase):
|
|
|
727
724
|
|
|
728
725
|
|
|
729
726
|
#: The type of parametrized Guppy types.
|
|
730
|
-
ParametrizedType: TypeAlias =
|
|
731
|
-
|
|
732
|
-
)
|
|
727
|
+
ParametrizedType: TypeAlias = FunctionType | TupleType | OpaqueType | StructType
|
|
728
|
+
|
|
733
729
|
|
|
734
730
|
#: The type of Guppy types.
|
|
735
731
|
#:
|
|
@@ -811,8 +807,6 @@ def unify(s: Type | Const, t: Type | Const, subst: "Subst | None") -> "Subst | N
|
|
|
811
807
|
return _unify_args(s, t, subst)
|
|
812
808
|
case TupleType() as s, TupleType() as t:
|
|
813
809
|
return _unify_args(s, t, subst)
|
|
814
|
-
case SumType() as s, SumType() as t:
|
|
815
|
-
return _unify_args(s, t, subst)
|
|
816
810
|
case OpaqueType() as s, OpaqueType() as t if s.defn == t.defn:
|
|
817
811
|
return _unify_args(s, t, subst)
|
|
818
812
|
case StructType() as s, StructType() as t if s.defn == t.defn:
|
|
@@ -881,6 +875,8 @@ def function_tensor_signature(tys: list[FunctionType]) -> FunctionType:
|
|
|
881
875
|
outputs: list[Type] = []
|
|
882
876
|
for fun_ty in tys:
|
|
883
877
|
assert not fun_ty.parametrized
|
|
884
|
-
|
|
878
|
+
# Forget the function input names since they might be non-unique across the
|
|
879
|
+
# tensored functions
|
|
880
|
+
inputs.extend([replace(inp, name=None) for inp in fun_ty.inputs])
|
|
885
881
|
outputs.extend(type_to_row(fun_ty.output))
|
|
886
882
|
return FunctionType(inputs, row_to_type(outputs))
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from typing import ClassVar
|
|
3
|
+
|
|
4
|
+
import wasmtime as wt
|
|
5
|
+
|
|
6
|
+
from guppylang_internals.diagnostic import Error, Note
|
|
7
|
+
from guppylang_internals.tys.ty import (
|
|
8
|
+
FuncInput,
|
|
9
|
+
FunctionType,
|
|
10
|
+
InputFlags,
|
|
11
|
+
NoneType,
|
|
12
|
+
NumericType,
|
|
13
|
+
Type,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# The thing to be imported elsewhere
|
|
18
|
+
@dataclass
|
|
19
|
+
class ConcreteWasmModule:
|
|
20
|
+
filename: str
|
|
21
|
+
# Function names in order for looking up by index
|
|
22
|
+
functions: list[str]
|
|
23
|
+
function_sigs: dict[str, FunctionType | str]
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@dataclass(frozen=True)
|
|
27
|
+
class WasmSignatureError(Error):
|
|
28
|
+
title: ClassVar[str] = (
|
|
29
|
+
"Invalid signature for @wasm function `{fn_name}`\n"
|
|
30
|
+
"in wasm file: `{filename}`"
|
|
31
|
+
)
|
|
32
|
+
fn_name: str
|
|
33
|
+
filename: str
|
|
34
|
+
|
|
35
|
+
@dataclass(frozen=True)
|
|
36
|
+
class Message(Note):
|
|
37
|
+
message = "{msg}"
|
|
38
|
+
msg: str
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@dataclass(frozen=True)
|
|
42
|
+
class WasmFileNotFound(Error):
|
|
43
|
+
title: ClassVar[str] = "Wasm file `{file}` not found"
|
|
44
|
+
file: str
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
@dataclass(frozen=True)
|
|
48
|
+
class WasmFunctionNotInFile(Error):
|
|
49
|
+
title: ClassVar[str] = (
|
|
50
|
+
"Declared wasm function `{function}` isn't exported by wasm file"
|
|
51
|
+
)
|
|
52
|
+
function: str
|
|
53
|
+
|
|
54
|
+
@dataclass(frozen=True)
|
|
55
|
+
class WasmFileNote(Note):
|
|
56
|
+
message: ClassVar[str] = "Wasm file: {filename}"
|
|
57
|
+
filename: str
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
@dataclass(frozen=True)
|
|
61
|
+
class WasmSigMismatchError(Error):
|
|
62
|
+
title: ClassVar[str] = "Wasm signature mismatch"
|
|
63
|
+
span_label: ClassVar[str] = (
|
|
64
|
+
"Signature of wasm function didn't match that in provided wasm file"
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
@dataclass(frozen=True)
|
|
68
|
+
class Declaration(Note):
|
|
69
|
+
message: ClassVar[str] = "Declared signature: {declared}"
|
|
70
|
+
declared: str
|
|
71
|
+
|
|
72
|
+
@dataclass(frozen=True)
|
|
73
|
+
class Actual(Note):
|
|
74
|
+
message: ClassVar[str] = "Signature in wasm: {actual}"
|
|
75
|
+
actual: str
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def decode_type(ty: wt.ValType) -> Type | None:
|
|
79
|
+
if ty == wt.ValType.i64():
|
|
80
|
+
return NumericType(NumericType.Kind.Int)
|
|
81
|
+
elif ty == wt.ValType.f64():
|
|
82
|
+
return NumericType(NumericType.Kind.Float)
|
|
83
|
+
else:
|
|
84
|
+
return None
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def decode_sig(
|
|
88
|
+
params: list[wt.ValType], output: wt.ValType | None
|
|
89
|
+
) -> FunctionType | str:
|
|
90
|
+
# Function args in wasm are called "params"
|
|
91
|
+
my_params: list[FuncInput] = []
|
|
92
|
+
for p in params:
|
|
93
|
+
if ty := decode_type(p):
|
|
94
|
+
my_params.append(FuncInput(ty, flags=InputFlags.NoFlags))
|
|
95
|
+
else:
|
|
96
|
+
return f"Unsupported input type: {p}"
|
|
97
|
+
if output:
|
|
98
|
+
if ty := decode_type(output):
|
|
99
|
+
return FunctionType(my_params, ty)
|
|
100
|
+
else:
|
|
101
|
+
return f"Unsupported output type: {output}"
|
|
102
|
+
else:
|
|
103
|
+
return FunctionType(my_params, NoneType())
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def decode_wasm_functions(filename: str) -> ConcreteWasmModule:
|
|
107
|
+
engine = wt.Engine()
|
|
108
|
+
mod = wt.Module.from_file(engine, filename)
|
|
109
|
+
|
|
110
|
+
functions: list[str] = []
|
|
111
|
+
function_sigs: dict[str, FunctionType | str] = {}
|
|
112
|
+
for fn in mod.exports:
|
|
113
|
+
functions.append(fn.name)
|
|
114
|
+
match fn.type:
|
|
115
|
+
case wt.FuncType() as fun_ty:
|
|
116
|
+
match fun_ty.results:
|
|
117
|
+
case []:
|
|
118
|
+
data = decode_sig(fun_ty.params, None)
|
|
119
|
+
case [output]:
|
|
120
|
+
data = decode_sig(fun_ty.params, output)
|
|
121
|
+
case _multi:
|
|
122
|
+
data = (
|
|
123
|
+
f"Multiple output types unsupported in function `{fn.name}`"
|
|
124
|
+
)
|
|
125
|
+
case _:
|
|
126
|
+
data = f"`{fn.name}` is not exported as a function"
|
|
127
|
+
function_sigs[fn.name] = data
|
|
128
|
+
|
|
129
|
+
return ConcreteWasmModule(filename, functions, function_sigs)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: guppylang-internals
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.26.0
|
|
4
4
|
Summary: Compiler internals for `guppylang` package.
|
|
5
5
|
Author-email: Mark Koch <mark.koch@quantinuum.com>, TKET development team <tket-support@quantinuum.com>
|
|
6
6
|
Maintainer-email: Mark Koch <mark.koch@quantinuum.com>, TKET development team <tket-support@quantinuum.com>
|
|
@@ -222,6 +222,7 @@ Requires-Python: <4,>=3.10
|
|
|
222
222
|
Requires-Dist: hugr~=0.14.1
|
|
223
223
|
Requires-Dist: tket-exts~=0.12.0
|
|
224
224
|
Requires-Dist: typing-extensions<5,>=4.9.0
|
|
225
|
+
Requires-Dist: wasmtime~=v38.0.0
|
|
225
226
|
Provides-Extra: pytket
|
|
226
227
|
Requires-Dist: pytket>=1.34; extra == 'pytket'
|
|
227
228
|
Description-Content-Type: text/markdown
|
|
@@ -244,10 +245,10 @@ pip install guppylang-internals
|
|
|
244
245
|
|
|
245
246
|
See [DEVELOPMENT.md] information on how to develop and contribute to this package.
|
|
246
247
|
|
|
247
|
-
[DEVELOPMENT.md]: https://github.com/
|
|
248
|
+
[DEVELOPMENT.md]: https://github.com/quantinuum/guppylang/blob/main/DEVELOPMENT.md
|
|
248
249
|
|
|
249
250
|
## License
|
|
250
251
|
|
|
251
252
|
This project is licensed under Apache License, Version 2.0 ([LICENCE][] or http://www.apache.org/licenses/LICENSE-2.0).
|
|
252
253
|
|
|
253
|
-
[LICENCE]: https://github.com/
|
|
254
|
+
[LICENCE]: https://github.com/quantinuum/guppylang/blob/main/LICENCE
|
|
@@ -1,84 +1,87 @@
|
|
|
1
|
-
guppylang_internals/__init__.py,sha256=
|
|
1
|
+
guppylang_internals/__init__.py,sha256=eRNAncl2ENPaWe98y6nNX-U9UtENwgo-yfbWQkZy8Cs,130
|
|
2
2
|
guppylang_internals/ast_util.py,sha256=WHa7axpGrdsjzQk3iw3reDzYlcmsx0HsNH4Qbqwjjig,12531
|
|
3
|
-
guppylang_internals/decorator.py,sha256=
|
|
3
|
+
guppylang_internals/decorator.py,sha256=i0PV3XzWBFjBUBSGfq7d4KmQuEwvM3bAsatcTXVZq98,14112
|
|
4
4
|
guppylang_internals/diagnostic.py,sha256=VCpIhyVD8KPtk0GDYMa8XH0lKVsRbsWNu_ucE2jQT2I,18395
|
|
5
5
|
guppylang_internals/dummy_decorator.py,sha256=LXTXrdcrr55YzerX3qrHS23q6S9pVdpUAvhprWzKH6E,2330
|
|
6
|
-
guppylang_internals/engine.py,sha256=
|
|
6
|
+
guppylang_internals/engine.py,sha256=Npp02xXTb6bFYmHw52LVsVCAUi6dT3qaItEmpCB_2uA,10889
|
|
7
7
|
guppylang_internals/error.py,sha256=fjHsbglnH9GtcsLF4sSry7FTjrLoiyQ-L1JS3uGirx0,3393
|
|
8
8
|
guppylang_internals/experimental.py,sha256=yERQgpT7P-x0-nr4gU4PdUCntByQwF2I9rfjpWtgqn4,3115
|
|
9
9
|
guppylang_internals/ipython_inspect.py,sha256=rY2DpSpSBrRk0IZmuoz7jh35kGZHQnHLAQQFdb_-WnI,931
|
|
10
|
-
guppylang_internals/nodes.py,sha256=
|
|
10
|
+
guppylang_internals/nodes.py,sha256=wnnAI3sHZ-OwolcZMKYA_dkmz4IE5Y4CFqXDJ0LXAJM,12824
|
|
11
11
|
guppylang_internals/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
12
|
guppylang_internals/span.py,sha256=8rWzAAipWunhhyCp44qdUAPmOfAXkEMvicK0PYc3tTg,4986
|
|
13
|
+
guppylang_internals/wasm_util.py,sha256=TyTS9pbFlqpcjCnRwCdCQliGhUWVHkUcZswAytI8oNc,3590
|
|
13
14
|
guppylang_internals/cfg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
15
|
guppylang_internals/cfg/analysis.py,sha256=fD3cY0bZ85iNWcmLAXFaXwcdCfB7gzssKjYfsm1J-wQ,8365
|
|
15
16
|
guppylang_internals/cfg/bb.py,sha256=TxV5yHRqiH86lvLR0g4EZ4fs7S6Axoof1l0TIAZArJM,8591
|
|
16
|
-
guppylang_internals/cfg/builder.py,sha256=
|
|
17
|
-
guppylang_internals/cfg/cfg.py,sha256=
|
|
17
|
+
guppylang_internals/cfg/builder.py,sha256=QqzleSd5-3h77Uy-ng_lNJz73C6-eGwgG_6my8Dh2pQ,28252
|
|
18
|
+
guppylang_internals/cfg/cfg.py,sha256=qQuWGK1rgPIkMyJFsX3LrqnXp3ptDDOuXwTbgf_NUSE,4489
|
|
18
19
|
guppylang_internals/checker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
|
-
guppylang_internals/checker/cfg_checker.py,sha256=
|
|
20
|
-
guppylang_internals/checker/core.py,sha256=
|
|
21
|
-
guppylang_internals/checker/expr_checker.py,sha256=
|
|
22
|
-
guppylang_internals/checker/func_checker.py,sha256=
|
|
23
|
-
guppylang_internals/checker/linearity_checker.py,sha256=
|
|
24
|
-
guppylang_internals/checker/modifier_checker.py,sha256=
|
|
20
|
+
guppylang_internals/checker/cfg_checker.py,sha256=0hDxw2CTbTbjewtDjaoBehgon17tJaQG9YPO_qR6P0Q,13667
|
|
21
|
+
guppylang_internals/checker/core.py,sha256=IPgnaRih5flDevzJsu6o_ycG3vk2X9Mt4A-MZ7gufNU,18163
|
|
22
|
+
guppylang_internals/checker/expr_checker.py,sha256=cQVigPN-BE-0nfo_8EUSxCgzSFFfRTxA3dvEMZzzGA8,60121
|
|
23
|
+
guppylang_internals/checker/func_checker.py,sha256=WxQtwQdYOfvPVHRem__LoBMax5eUzvmqEJXbxmHzG5M,16118
|
|
24
|
+
guppylang_internals/checker/linearity_checker.py,sha256=cVgoUshu6YPEJ2mgk3RUWx38qt52WNMxjyLVV5eqgD4,37160
|
|
25
|
+
guppylang_internals/checker/modifier_checker.py,sha256=ruhEkbT4g9YIJXOGRsfpdzUsbXxEbS95PC1LG-EAl3o,4175
|
|
25
26
|
guppylang_internals/checker/stmt_checker.py,sha256=paUBaAwx3QRpJAonND8wBpO4FxcNb4iPXMzImB11T9A,20785
|
|
27
|
+
guppylang_internals/checker/unitary_checker.py,sha256=TVUT4JskaOzNVLcMrQwOd5t5MBLdHC2jFEtFHzlOW8I,4512
|
|
26
28
|
guppylang_internals/checker/errors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
27
29
|
guppylang_internals/checker/errors/comptime_errors.py,sha256=ee42lnVjXbjqirjp6vYaRvbKKexeNV08px1Kqu9eXn8,3436
|
|
28
30
|
guppylang_internals/checker/errors/generic.py,sha256=r-BiSrmJh9jfXlxE029GMQ8yj30_qOTW2RAQsd3HYzs,2050
|
|
29
31
|
guppylang_internals/checker/errors/linearity.py,sha256=VLGvwzfW6uljNjYUEIxNkgt6s3q9-yo1O22BoTiS4Xs,8922
|
|
30
32
|
guppylang_internals/checker/errors/type_errors.py,sha256=KUmcpN3tGLI_8BogcGKfV_N5BO7yqEBPgyHmf8hk-3M,10619
|
|
31
|
-
guppylang_internals/checker/errors/wasm.py,sha256=
|
|
33
|
+
guppylang_internals/checker/errors/wasm.py,sha256=TlwQRtlA0zpu8xwkBHWPYc25OIb6NrMHRxuYUfyD0Rg,956
|
|
32
34
|
guppylang_internals/compiler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
|
-
guppylang_internals/compiler/cfg_compiler.py,sha256=
|
|
34
|
-
guppylang_internals/compiler/core.py,sha256=
|
|
35
|
-
guppylang_internals/compiler/expr_compiler.py,sha256=
|
|
35
|
+
guppylang_internals/compiler/cfg_compiler.py,sha256=dKAh2dWMUCXHpb5GjRzgT6Npnv74Vx5WqMaaa_X1koI,9004
|
|
36
|
+
guppylang_internals/compiler/core.py,sha256=iWD2K4Ztu1nvK6o5ZIyR_c3UBc4cjBxfgzrZEJuOdfY,31548
|
|
37
|
+
guppylang_internals/compiler/expr_compiler.py,sha256=ZlOP4JnvggjXC3uf0km-nRzk04IbblEdEJLeZpIWFDI,37198
|
|
36
38
|
guppylang_internals/compiler/func_compiler.py,sha256=0bo28RNsFZDYmllle-yFUXKC0UJsLl2TVjr3gvDMJVA,3377
|
|
37
39
|
guppylang_internals/compiler/hugr_extension.py,sha256=eFUcxzBZoVzXV-AqEOJlh_rJkyuS3vFv1WKGOHjloJs,7966
|
|
38
|
-
guppylang_internals/compiler/modifier_compiler.py,sha256=
|
|
40
|
+
guppylang_internals/compiler/modifier_compiler.py,sha256=Ni0ANon4kI8Ro3YIh_jt1-7Ucs12KmWmE7QDq_MDMgw,6464
|
|
39
41
|
guppylang_internals/compiler/qtm_platform_extension.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
40
42
|
guppylang_internals/compiler/stmt_compiler.py,sha256=cdOgqzRVP1hYeGbGftgY8LlFRHLWdgFPjlhK-khoMvw,9340
|
|
41
43
|
guppylang_internals/definition/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
42
44
|
guppylang_internals/definition/common.py,sha256=Me7gpCTzOqDv7eRv6Wo5ynsMYy6MEDpeX9uY2acYRDI,6927
|
|
43
45
|
guppylang_internals/definition/const.py,sha256=71QVX3xqSaC0u4bsYHPbR_0Csz1Es-P7HHGxbTZXfNI,2283
|
|
44
|
-
guppylang_internals/definition/custom.py,sha256=
|
|
45
|
-
guppylang_internals/definition/declaration.py,sha256=
|
|
46
|
+
guppylang_internals/definition/custom.py,sha256=sPYY8o1_WuSNHQazV4KCvUcLer8mvepTYb285XMGkEM,19683
|
|
47
|
+
guppylang_internals/definition/declaration.py,sha256=vwo7P6D3TJU_6wfTWmx6KnmjOCCGLiGjJQ-Zf_02rYM,6038
|
|
46
48
|
guppylang_internals/definition/extern.py,sha256=hEajRYaapKIfX9J7scnusQHc1e_bCxB4oUVWZ-D4c8o,2878
|
|
47
|
-
guppylang_internals/definition/function.py,sha256=
|
|
49
|
+
guppylang_internals/definition/function.py,sha256=LPWvQrlzTnY_18n_myD063p7KdXM51CJIIjmpdBTStY,11395
|
|
48
50
|
guppylang_internals/definition/overloaded.py,sha256=UQ64waMp48gEVDCqEzuJFrRoNJ9saUIRUAynF3T-Gz8,5132
|
|
49
51
|
guppylang_internals/definition/parameter.py,sha256=l60l-yO34gpeuKZ5D3ru8CS8wnQGuoAgqIUP1CrfOF8,2789
|
|
50
|
-
guppylang_internals/definition/pytket_circuits.py,sha256=
|
|
51
|
-
guppylang_internals/definition/struct.py,sha256=
|
|
52
|
+
guppylang_internals/definition/pytket_circuits.py,sha256=SkOUg3EwBjpeb3_2PzvkH9xzAvI_OIt-wILY37wv2zI,17010
|
|
53
|
+
guppylang_internals/definition/struct.py,sha256=Jed5kcoc57toQr4f7zeB7mr6fSDP1Q2KRnmGJvbVXF4,15572
|
|
52
54
|
guppylang_internals/definition/traced.py,sha256=hMHnrLKdbMvmmzmcJRvOCR-WiPHJ3x5ji0am436HNTQ,5592
|
|
53
55
|
guppylang_internals/definition/ty.py,sha256=5Jt7twY8v1cE7noZ_RYfo0X55KYV6JI0itdHW9vvZs0,2085
|
|
54
56
|
guppylang_internals/definition/value.py,sha256=tgkp-brIAauGXMqe68Fnwvz_bfdThdwJ_rzsGMbw95w,3452
|
|
55
|
-
guppylang_internals/definition/wasm.py,sha256=
|
|
57
|
+
guppylang_internals/definition/wasm.py,sha256=iGxVdKIXYdfODLEvPg7fefE5lLWbQ3bWPIc6dAxnqWw,3389
|
|
56
58
|
guppylang_internals/std/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
57
59
|
guppylang_internals/std/_internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
58
|
-
guppylang_internals/std/_internal/checker.py,sha256=
|
|
60
|
+
guppylang_internals/std/_internal/checker.py,sha256=aFtfGxeJd2UypQs1otbK93Wq_rIEOiimSP4JqgB559I,18037
|
|
59
61
|
guppylang_internals/std/_internal/compiler.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
60
|
-
guppylang_internals/std/_internal/debug.py,sha256=
|
|
61
|
-
guppylang_internals/std/_internal/util.py,sha256=
|
|
62
|
+
guppylang_internals/std/_internal/debug.py,sha256=j6bGg9TFn4fR8-H8Hk10BfY9EkanfiJn5ArLeBMISZo,3894
|
|
63
|
+
guppylang_internals/std/_internal/util.py,sha256=e_sawDuuk1YFpbEQXbpAvWMNeTlkGb4P0t6Ed0JpP9M,8305
|
|
62
64
|
guppylang_internals/std/_internal/compiler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
63
65
|
guppylang_internals/std/_internal/compiler/arithmetic.py,sha256=_Nf-P3GwTp-ZVLz62Hz9ModD74R41hKqutNGmp5Mn6g,4287
|
|
64
|
-
guppylang_internals/std/_internal/compiler/array.py,sha256=
|
|
66
|
+
guppylang_internals/std/_internal/compiler/array.py,sha256=YTFzInN7DkU4M_AASHR__D_9bouvaNrYNRKxsO3-Fek,13491
|
|
65
67
|
guppylang_internals/std/_internal/compiler/either.py,sha256=LzLSfsafwVAgaeX8d91IRmrxK6kx0YC_MtGSBEgBsbs,4716
|
|
66
68
|
guppylang_internals/std/_internal/compiler/frozenarray.py,sha256=BZMSSYTieqcFaAXGTR0nw2b7eN5LK2Et4vNZSBFRcyI,2361
|
|
67
69
|
guppylang_internals/std/_internal/compiler/futures.py,sha256=nIaxXCGj4BPI_to_Q87gQEqN94Q8hb09ICkODZVOJrQ,1095
|
|
68
|
-
guppylang_internals/std/_internal/compiler/list.py,sha256=
|
|
70
|
+
guppylang_internals/std/_internal/compiler/list.py,sha256=Tqvs-J7iL5TxG5qgk-dboXU3-y7uZq-tQ9r9xFhmw4c,12574
|
|
69
71
|
guppylang_internals/std/_internal/compiler/mem.py,sha256=hiPFzZYAne9b0Si8JXIzLuXhqvv20kDtIjG7m-jRA8U,516
|
|
70
72
|
guppylang_internals/std/_internal/compiler/option.py,sha256=no0KlvQFLNmXXOPzdqede-TeuYzkFTrmh_CPrAxKZ1c,2621
|
|
71
|
-
guppylang_internals/std/_internal/compiler/
|
|
73
|
+
guppylang_internals/std/_internal/compiler/platform.py,sha256=3TMYdRO--Sabapo4K0T_AfG1OMUYRDaltrNHJb4hXvg,6161
|
|
74
|
+
guppylang_internals/std/_internal/compiler/prelude.py,sha256=2pOmi1JNBHsETkC4EGskbFBAZAlAJ4IvWZLe5v4DIFM,9635
|
|
72
75
|
guppylang_internals/std/_internal/compiler/qsystem.py,sha256=dKSpvpxF7WRfWuDj0u7zShEhTL6mkAr9pQNyYVoa8vM,1940
|
|
73
76
|
guppylang_internals/std/_internal/compiler/quantum.py,sha256=gXuB1vpRl8ipgwwEYPCgoMPiqPUJ908Msl09jJFdWxg,3930
|
|
74
77
|
guppylang_internals/std/_internal/compiler/tket_bool.py,sha256=ceO9BBF3HhjNAkc4dObJBH13Kpn08-pSaksjl3yoOa4,1207
|
|
75
|
-
guppylang_internals/std/_internal/compiler/tket_exts.py,sha256=
|
|
78
|
+
guppylang_internals/std/_internal/compiler/tket_exts.py,sha256=E7Ywu6xiMepkFoNYZ90rBMPLi3l1MlZSTJE0YmO6TAo,1540
|
|
76
79
|
guppylang_internals/std/_internal/compiler/wasm.py,sha256=1G8EzrnN3Yv12hIdv2XOg4Hq-QlvRYl7-4QbZYLYyM4,5727
|
|
77
80
|
guppylang_internals/tracing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
78
81
|
guppylang_internals/tracing/builtins_mock.py,sha256=iKgrs626DVhdN7nJroKBLstWGwkr7PzJI4CrgqkMyTA,2963
|
|
79
82
|
guppylang_internals/tracing/frozenlist.py,sha256=sINk-PZTw4dNThF5GK9AZxAeX5ap-g_hbqxZ79GtLAc,1823
|
|
80
83
|
guppylang_internals/tracing/function.py,sha256=K2rEey0awOxwfljGk4uezRmXode7rgOKQY1VN94wOIo,7901
|
|
81
|
-
guppylang_internals/tracing/object.py,sha256=
|
|
84
|
+
guppylang_internals/tracing/object.py,sha256=UMysud9Cc4pHqIDF2qn0zwo97q5d1IqMn1CHxvcitBs,20393
|
|
82
85
|
guppylang_internals/tracing/state.py,sha256=J-fG0dZh9IeB6hpLfyp5IwqS2TW0Zr8XloMmuIHWS6Q,2083
|
|
83
86
|
guppylang_internals/tracing/unpacking.py,sha256=6Df9h4pFS6mebyU3VR5DfO87Rs_QbTdSkLMNjpaM0Xc,8728
|
|
84
87
|
guppylang_internals/tracing/util.py,sha256=zzVUeY7Ax4v_ZQh7QmckYaOWsg7BRZg6-oX4VWmytDU,3054
|
|
@@ -87,15 +90,15 @@ guppylang_internals/tys/arg.py,sha256=zrZm_6TnXS-tFvk5xRk40ayu8z99OQ_35L9oMp6hGN
|
|
|
87
90
|
guppylang_internals/tys/builtin.py,sha256=9QY_ayWxiwWkeTC2erIicbq4ZMbzETw0PbIl8hBu0XQ,12544
|
|
88
91
|
guppylang_internals/tys/common.py,sha256=kCJDzSquUdztV5zEINE0Lxigawux9te0lmzd0Oa70J0,3575
|
|
89
92
|
guppylang_internals/tys/const.py,sha256=kl15uOriJFLUpoodb75f4dl3HYYa6OuKWA2B0vheVPY,4876
|
|
90
|
-
guppylang_internals/tys/errors.py,sha256=
|
|
93
|
+
guppylang_internals/tys/errors.py,sha256=zg3R-R-W5D-5kAm_xEemvfs4GJ7NHLgAL_N2WToquZA,6158
|
|
91
94
|
guppylang_internals/tys/param.py,sha256=NXNDp8yrxbCkCo6oWCnjGg1ZoJ-F0leR5aUIj2eZQrc,10165
|
|
92
|
-
guppylang_internals/tys/parsing.py,sha256=
|
|
93
|
-
guppylang_internals/tys/printing.py,sha256=
|
|
94
|
-
guppylang_internals/tys/qubit.py,sha256=
|
|
95
|
+
guppylang_internals/tys/parsing.py,sha256=w2uHVcGXU6ekMQZSPX0je9gSavigh3GIyIr8jvq2oSg,15974
|
|
96
|
+
guppylang_internals/tys/printing.py,sha256=4DewINiHYMI_l_hmhDhfUYiWmfdj2s2NkKZcMC4Qu7U,5723
|
|
97
|
+
guppylang_internals/tys/qubit.py,sha256=Y7RRc3_bP9LIoAMqjDsVNVzaplgF7h26L2OJB5XpDVc,1732
|
|
95
98
|
guppylang_internals/tys/subst.py,sha256=fMIh7jNMMNiKjlr3WMxAwY_ovX1qTaz_c5foruYkLPs,3049
|
|
96
|
-
guppylang_internals/tys/ty.py,sha256=
|
|
99
|
+
guppylang_internals/tys/ty.py,sha256=kRkI_QfPbITKuHre29Ejha55Y68j-aiLAWSBdvO1Ma8,31115
|
|
97
100
|
guppylang_internals/tys/var.py,sha256=zACXv2IvGrqjDryC6lMyZpNnDb3SBRM2SlTOyq6WJdo,1173
|
|
98
|
-
guppylang_internals-0.
|
|
99
|
-
guppylang_internals-0.
|
|
100
|
-
guppylang_internals-0.
|
|
101
|
-
guppylang_internals-0.
|
|
101
|
+
guppylang_internals-0.26.0.dist-info/METADATA,sha256=yTv-p1nskM4Z4zIz0laFimpTCmF5bYPq6NxG_t_h8PY,14853
|
|
102
|
+
guppylang_internals-0.26.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
103
|
+
guppylang_internals-0.26.0.dist-info/licenses/LICENCE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
104
|
+
guppylang_internals-0.26.0.dist-info/RECORD,,
|
{guppylang_internals-0.25.0.dist-info → guppylang_internals-0.26.0.dist-info}/licenses/LICENCE
RENAMED
|
File without changes
|