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.
Files changed (43) hide show
  1. guppylang_internals/__init__.py +1 -1
  2. guppylang_internals/cfg/builder.py +17 -2
  3. guppylang_internals/cfg/cfg.py +3 -0
  4. guppylang_internals/checker/cfg_checker.py +6 -0
  5. guppylang_internals/checker/core.py +1 -2
  6. guppylang_internals/checker/errors/wasm.py +7 -4
  7. guppylang_internals/checker/expr_checker.py +13 -8
  8. guppylang_internals/checker/func_checker.py +17 -13
  9. guppylang_internals/checker/linearity_checker.py +2 -10
  10. guppylang_internals/checker/modifier_checker.py +6 -2
  11. guppylang_internals/checker/unitary_checker.py +132 -0
  12. guppylang_internals/compiler/cfg_compiler.py +7 -6
  13. guppylang_internals/compiler/core.py +5 -5
  14. guppylang_internals/compiler/expr_compiler.py +42 -73
  15. guppylang_internals/compiler/modifier_compiler.py +2 -0
  16. guppylang_internals/decorator.py +86 -7
  17. guppylang_internals/definition/custom.py +4 -0
  18. guppylang_internals/definition/declaration.py +6 -2
  19. guppylang_internals/definition/function.py +12 -2
  20. guppylang_internals/definition/pytket_circuits.py +1 -0
  21. guppylang_internals/definition/struct.py +6 -3
  22. guppylang_internals/definition/wasm.py +42 -10
  23. guppylang_internals/engine.py +9 -3
  24. guppylang_internals/nodes.py +23 -24
  25. guppylang_internals/std/_internal/checker.py +13 -108
  26. guppylang_internals/std/_internal/compiler/array.py +1 -1
  27. guppylang_internals/std/_internal/compiler/list.py +1 -1
  28. guppylang_internals/std/_internal/compiler/platform.py +153 -0
  29. guppylang_internals/std/_internal/compiler/prelude.py +12 -4
  30. guppylang_internals/std/_internal/compiler/tket_exts.py +3 -4
  31. guppylang_internals/std/_internal/debug.py +18 -9
  32. guppylang_internals/std/_internal/util.py +1 -1
  33. guppylang_internals/tracing/object.py +10 -0
  34. guppylang_internals/tys/errors.py +23 -1
  35. guppylang_internals/tys/parsing.py +3 -3
  36. guppylang_internals/tys/printing.py +2 -8
  37. guppylang_internals/tys/qubit.py +37 -2
  38. guppylang_internals/tys/ty.py +60 -64
  39. guppylang_internals/wasm_util.py +129 -0
  40. {guppylang_internals-0.25.0.dist-info → guppylang_internals-0.26.0.dist-info}/METADATA +4 -3
  41. {guppylang_internals-0.25.0.dist-info → guppylang_internals-0.26.0.dist-info}/RECORD +43 -40
  42. {guppylang_internals-0.25.0.dist-info → guppylang_internals-0.26.0.dist-info}/WHEEL +1 -1
  43. {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 name, inp in zip(sig.input_names, sig.inputs, strict=True)
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)
@@ -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.ty import Type
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
@@ -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
- [FuncInput(inp.ty.transform(inst), inp.flags) for inp in self.inputs],
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
- FunctionType | TupleType | SumType | OpaqueType | StructType
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
- inputs.extend(fun_ty.inputs)
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.25.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/CQCL/guppylang/blob/main/DEVELOPMENT.md
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/CQCL/guppylang/blob/main/LICENCE
254
+ [LICENCE]: https://github.com/quantinuum/guppylang/blob/main/LICENCE
@@ -1,84 +1,87 @@
1
- guppylang_internals/__init__.py,sha256=EgbPDr6Utan7jHefvmK8YWd_y5KDx9mb6kOXetg5X_4,130
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=AWfPMMXzq5YC8nfB6DOwnRsrWKztuUK19n8APllgQ2w,10928
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=enloUzh4-2Ac0L7UCIzsMvsjzHvWIy8MvDoT2xhPdKk,10625
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=rJMtAJL_eRnrI6MZkweAWs1gYteCP3HSZM9BEkyAW7Q,12803
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=UJXLzCNEA8nKCrRV3Y2AhMVwncbiHFD5m4t8zIKD5Ag,27630
17
- guppylang_internals/cfg/cfg.py,sha256=G6wTHtyRYcBN7FIwyIQnt3akVjM-Rl37PEXAaujplMg,4355
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=SH_89mAQLNBVesERm9alJJ2h0xzQFzCA5uKBD2VfJms,13472
20
- guppylang_internals/checker/core.py,sha256=MHCHleEKRvI5mCV5w4VGdM51qjqHLb-2hFDpjG_tvCM,18188
21
- guppylang_internals/checker/expr_checker.py,sha256=G9NrLmr3vv9XZp0l5N5lOdMZdyCOWgwYhTYrlaxVEZA,59706
22
- guppylang_internals/checker/func_checker.py,sha256=e9FrEe72Y-KUchXtGljRUTr1tA4uwKVRv8uQVlInicA,15925
23
- guppylang_internals/checker/linearity_checker.py,sha256=3RcJvXxgVZYsDijXpxubekpF1-XnNqKqaKF58VXorYg,37463
24
- guppylang_internals/checker/modifier_checker.py,sha256=REzu1DVVutKlGAas2Gu8HKdPN83QlY9XHyxrotdF8vM,4042
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=tRpNhC8IZBkv6Nkn_dMRwGpDdZklv7UZdlYBu4WqI1A,874
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=nGQmPYhXzicZ16_-8sgFC-sfLxMFEDSGd1Xf0j7LTK0,9039
34
- guppylang_internals/compiler/core.py,sha256=mw7mQXQoBrt28NxjQ-3JSKhYVyVsDC21YVDaAaDtWBo,31518
35
- guppylang_internals/compiler/expr_compiler.py,sha256=Km9ne1yd6A9ykpZvNMtZyktPagjJCHoZWEpx2M8i7gY,38600
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=3KtA0YvMpj_JTCQAOH2leRQPFX1nyxFppAdEPWcjuk0,6315
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=V3KU92rIonEdWyCwt3Rfkblic-XH-V0moGCTws3Sgbc,19539
45
- guppylang_internals/definition/declaration.py,sha256=rmZdYHTTxjALfWmEfoNMVQ9hBmeV3o3VNXm9gcs3ubc,5883
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=oz-4dk5gyc0sYIPbAmTgpbxl5dokjb8oPX1wM22z2EI,10969
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=m_TlUATO7ijHv3O0Dm7FhbalRBufQ4sJ_kxRo500Bdo,16952
51
- guppylang_internals/definition/struct.py,sha256=YLFgCN9G2IufS2Z7X-nsUz6DxBMYa6MCtw-YwSAQniw,15534
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=Op8IpiKRZkNX-90UBp7uu3nCxx2VkbKKxHz-DZQuWs0,1987
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=26GgGr2bBu6CAeWiYh-ggCz5rjOuL_ZJgbq1KwpZE4k,21731
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=hRgUM-35Mm0oZ1EPjr3RRTejaSD0Nb8wDF2e0RXpq9M,3615
61
- guppylang_internals/std/_internal/util.py,sha256=vkLUfIOwmRsjHbUmh-Gt4ykCUGZtQ2D6pLqpH-h-FbY,8299
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=PepiCUthF0ebHF2eUUXSkRT_NPNS6gqqKiOhm0sv90c,13485
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=D8SfpHpvCJM_wZIUAMCAj6BWoMi_ah6mI_yG_cDZa-w,12568
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/prelude.py,sha256=fwWWNDNUggFrtIG1JeQQM4_R905jMHrX551MOxOaKT8,9318
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=dvs9lgruCCvXno7aShwdLJs0dQHjjCxmPYODGEo66yU,1572
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=WLALkgqCMXOmPOydb4Rkg7OxRweSke1f9YU_JohMaiE,19748
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=Llc1CXDqkXW6Hi-cpMJaTLKweSN2a2E4sHpXapC0VRA,5514
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=Dn7VPvmbjAHCXlC54TiUYDvDZA4HNkqabscm44wMi3c,15956
93
- guppylang_internals/tys/printing.py,sha256=F60SZsvqDRNMQSbgNDfBDt2pYQH2ueaZo7ObmUa2fLE,5961
94
- guppylang_internals/tys/qubit.py,sha256=Mp1hW9fMBtzrN2U7BTYUmH-FzFw08EUMIcSYZFCsK30,820
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=AKoiEXH35ZQooKA5LDT6zzoV4uDRaNFOHBN0JJjtn2g,31110
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.25.0.dist-info/METADATA,sha256=4BWfyYCyPcZwe3SzpNToowtCNtH498OMi-Kxx-MNQ7w,14808
99
- guppylang_internals-0.25.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
100
- guppylang_internals-0.25.0.dist-info/licenses/LICENCE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
101
- guppylang_internals-0.25.0.dist-info/RECORD,,
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,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any