Skip to content

Commit 05a9f94

Browse files
authored
Support pydantic v2 and get rid of plum warnings (#922)
* Support pydantic v2 the easiest way possible and get rid of plum warnings * whoops forgot lint * bump version
1 parent e2561c6 commit 05a9f94

33 files changed

+60
-47
lines changed

pdm.lock

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "bloqade"
3-
version = "0.15.7"
3+
version = "0.15.8"
44
description = "Neutral atom software development kit"
55
authors = [
66
{name = "QuEra Computing Inc.", email = "[email protected]"},
@@ -18,7 +18,7 @@ classifiers = [
1818
dependencies = [
1919
"juliacall>=0.9.14",
2020
"numpy>=1.25.2",
21-
"pydantic>=1.10.13",
21+
"pydantic>=2.0",
2222
"scipy>=1.9.3",
2323
"pandas>=2.1.0",
2424
"bokeh>=3.2.2",

src/bloqade/compiler/analysis/common/scan_variables.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from pydantic.dataclasses import dataclass
1+
from pydantic.v1.dataclasses import dataclass
22
import bloqade.ir.scalar as scalar
33
import bloqade.ir.control.field as field
44

src/bloqade/compiler/analysis/python/waveform.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import bloqade.ir.control.waveform as waveform
33
from beartype.typing import Dict, FrozenSet, Set
44
from beartype import beartype
5-
from pydantic.dataclasses import dataclass
5+
from pydantic.v1.dataclasses import dataclass
66

77

88
@dataclass(frozen=True)

src/bloqade/compiler/codegen/hardware/lattice.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from beartype.typing import Optional
77
import numpy as np
88
from decimal import Decimal
9-
from pydantic.dataclasses import dataclass
9+
from pydantic.v1.dataclasses import dataclass
1010
from beartype.typing import List, Tuple
1111

1212

src/bloqade/compiler/codegen/hardware/piecewise_constant.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from beartype.typing import List
88
from beartype import beartype
9-
from pydantic.dataclasses import dataclass
9+
from pydantic.v1.dataclasses import dataclass
1010
from bisect import bisect_right, bisect_left
1111
from decimal import Decimal
1212

src/bloqade/compiler/codegen/hardware/piecewise_linear.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
from beartype.typing import List
77
from beartype import beartype
8-
from pydantic.dataclasses import dataclass
8+
from pydantic.v1.dataclasses import dataclass
99
from bisect import bisect_left, bisect_right
1010
from decimal import Decimal
1111

src/bloqade/compiler/passes/hardware/components.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from bloqade.compiler.codegen.hardware.piecewise_linear import PiecewiseLinear
33
from bloqade.compiler.codegen.hardware.piecewise_constant import PiecewiseConstant
44
from beartype.typing import Optional, List
5-
from pydantic.dataclasses import dataclass
5+
from pydantic.v1.dataclasses import dataclass
66
from decimal import Decimal
77

88

src/bloqade/ir/analog_circuit.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from bloqade.ir.location.location import AtomArrangement, ParallelRegister
55
from bloqade.ir.tree_print import Printer
66
from beartype.typing import Union
7-
from pydantic.dataclasses import dataclass
7+
from pydantic.v1.dataclasses import dataclass
88

99

1010
# NOTE: this is just a dummy type bundle geometry and sequence

src/bloqade/ir/control/field.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from bloqade.ir.control.waveform import Waveform
55
from bloqade.ir.control.traits import HashTrait, CanonicalizeTrait
66
from bloqade.visualization import get_field_figure
7-
from pydantic.dataclasses import dataclass
7+
from pydantic.v1.dataclasses import dataclass
88
from beartype.typing import Dict, List, Optional
99
from decimal import Decimal
1010
from bloqade.visualization import display_ir

src/bloqade/ir/control/pulse.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
CanonicalizeTrait,
1212
)
1313
from beartype.typing import List
14-
from pydantic.dataclasses import dataclass
14+
from pydantic.v1.dataclasses import dataclass
1515
from bloqade.visualization import get_pulse_figure
1616
from bloqade.visualization import display_ir
1717

src/bloqade/ir/control/sequence.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from bloqade.ir.scalar import Interval, Scalar, cast
1111
from bloqade.ir.tree_print import Printer
1212

13-
from pydantic.dataclasses import dataclass
13+
from pydantic.v1.dataclasses import dataclass
1414
from beartype.typing import List, Dict
1515
from bloqade.visualization import get_ir_figure
1616
from bloqade.visualization import display_ir

src/bloqade/ir/control/waveform.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
from bisect import bisect_left, bisect_right
2121
from decimal import Decimal
22-
from pydantic.dataclasses import dataclass
22+
from pydantic.v1.dataclasses import dataclass
2323
from beartype.typing import Any, Tuple, Union, List, Callable, Dict, Container
2424
from beartype import beartype
2525
from enum import Enum

src/bloqade/ir/location/bravais.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from functools import cached_property
2-
from pydantic.dataclasses import dataclass
2+
from pydantic.v1.dataclasses import dataclass
33
from dataclasses import fields
44
import numpy as np
55
import itertools

src/bloqade/ir/location/location.py

+23-9
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
from bloqade.ir.scalar import Scalar, Literal, cast
44
from bloqade.ir.tree_print import Printer
55

6-
from pydantic.dataclasses import dataclass
6+
from pydantic.v1.dataclasses import dataclass
77
from beartype.typing import List, Tuple, Generator, Union, Optional
8+
from beartype.door import is_bearable
89
from beartype import beartype
910
from enum import Enum
1011
from numpy.typing import NDArray
@@ -14,7 +15,6 @@
1415

1516
from beartype.vale import Is
1617
from typing import Annotated
17-
from plum import dispatch
1818
import plotext as pltxt
1919
import sys
2020
import numpy as np
@@ -234,8 +234,8 @@ def scale(self, scale: ScalarType):
234234

235235
return ListOfLocations(location_list)
236236

237-
@dispatch
238-
def _add_position(
237+
## enforce input is single tuple and filling is single boolean
238+
def add_position_single_tupe(
239239
self, position: Tuple[ScalarType, ScalarType], filling: Optional[bool] = None
240240
):
241241
if filling is None:
@@ -246,8 +246,8 @@ def _add_position(
246246

247247
return ListOfLocations(location_list)
248248

249-
@dispatch
250-
def _add_position( # noqa: F811
249+
## enforce input is list of tuples and filling is list of booleans or none
250+
def add_position_list_tuples( # noqa: F811
251251
self,
252252
position: List[Tuple[ScalarType, ScalarType]],
253253
filling: Optional[List[bool]] = None,
@@ -268,8 +268,8 @@ def _add_position( # noqa: F811
268268

269269
return ListOfLocations(location_list)
270270

271-
@dispatch
272-
def _add_position( # noqa: F811
271+
## enforce input is numpy array and filling is numpy array or none
272+
def add_position_ndarray( # noqa: F811
273273
self, position: PositionArray, filling: Optional[BoolArray] = None
274274
):
275275
return self.add_position(
@@ -333,7 +333,21 @@ def add_position(
333333
shows your geometry in your web browser
334334
335335
"""
336-
return self._add_position(position, filling)
336+
337+
if is_bearable(position, PositionArray) and is_bearable(
338+
filling, Optional[BoolArray]
339+
):
340+
return self.add_position_ndarray(position, filling)
341+
elif is_bearable(position, List[Tuple[ScalarType, ScalarType]]) and is_bearable(
342+
filling, Optional[List[bool]]
343+
):
344+
return self.add_position_list_tuples(position, filling)
345+
elif is_bearable(position, Tuple[ScalarType, ScalarType]) and is_bearable(
346+
filling, Optional[bool]
347+
):
348+
return self.add_position_single_tupe(position, filling)
349+
else:
350+
raise TypeError("Invalid input types for add_position provided!")
337351

338352
@beartype
339353
def apply_defect_count(

src/bloqade/ir/routine/base.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
from bloqade.builder.parse.trait import Parse, Show
77
from bloqade.ir.routine.params import Params
88

9-
from pydantic import ConfigDict
10-
from pydantic.dataclasses import dataclass
9+
from pydantic.v1 import ConfigDict
10+
from pydantic.v1.dataclasses import dataclass
1111
from typing import TYPE_CHECKING, Union, Optional
1212

1313
if TYPE_CHECKING:

src/bloqade/ir/routine/bloqade.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from bloqade.task.batch import LocalBatch
66
from beartype import beartype
77
from beartype.typing import Optional, Tuple, Callable, Dict, Any, List, NamedTuple
8-
from pydantic.dataclasses import dataclass
8+
from pydantic.v1.dataclasses import dataclass
99
import numpy as np
1010

1111
from bloqade.emulate.codegen.hamiltonian import CompileCache, RydbergHamiltonianCodeGen

src/bloqade/ir/routine/braket.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from collections import OrderedDict
2-
from pydantic.dataclasses import dataclass
2+
from pydantic.v1.dataclasses import dataclass
33
from beartype import beartype
44
from beartype.typing import Optional, Tuple
55
from bloqade.builder.typing import LiteralType

src/bloqade/ir/routine/params.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from functools import cached_property
2-
from pydantic.dataclasses import dataclass
2+
from pydantic.v1.dataclasses import dataclass
33
from typing import Dict, List, Tuple, Union
44
from decimal import Decimal
55

src/bloqade/ir/routine/quera.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from collections import OrderedDict
2-
from pydantic.dataclasses import dataclass
2+
from pydantic.v1.dataclasses import dataclass
33
import json
44

55
from bloqade.builder.typing import LiteralType

src/bloqade/ir/scalar.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from typing import Any, Optional
22
import numpy as np
3-
from pydantic.dataclasses import dataclass
4-
from pydantic import ValidationError, validator
3+
from pydantic.v1.dataclasses import dataclass
4+
from pydantic.v1 import ValidationError, validator
55
from .tree_print import Printer
66
import re
77
from decimal import Decimal

src/bloqade/ir/tree_print.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Ported from the Julia language AbstractTrees.jl implementation: https://github.com/JuliaCollections/AbstractTrees.jl/blob/master/src/printing.jl
22

3-
from pydantic.dataclasses import dataclass
3+
from pydantic.v1.dataclasses import dataclass
44
import sys
55
import bloqade.ir as ir
66

src/bloqade/submission/base.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from bloqade.submission.ir.task_specification import QuEraTaskSpecification
33
from bloqade.submission.ir.task_results import QuEraTaskResults, QuEraTaskStatusCode
44
from typing import Union
5-
from pydantic import BaseModel, Extra
5+
from pydantic.v1 import BaseModel, Extra
66
from bloqade.submission.capabilities import get_capabilities
77
from bloqade.submission.ir.capabilities import QuEraCapabilities
88

src/bloqade/submission/braket.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from bloqade.submission.ir.task_specification import QuEraTaskSpecification
1515
from braket.aws import AwsDevice, AwsQuantumTask
1616
from beartype.typing import Optional
17-
from pydantic import PrivateAttr
17+
from pydantic.v1 import PrivateAttr
1818
import bloqade
1919

2020

src/bloqade/submission/ir/braket.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
LocalField,
2222
)
2323
from typing import Tuple, Union, List
24-
from pydantic import BaseModel
24+
from pydantic.v1 import BaseModel
2525
from decimal import Decimal
2626

2727

src/bloqade/submission/ir/capabilities.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from pydantic import BaseModel
1+
from pydantic.v1 import BaseModel
22
from decimal import Decimal
33
from beartype.typing import Optional
44
from beartype import beartype

src/bloqade/submission/ir/parallel.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from pydantic import BaseModel, validator, ValidationError
1+
from pydantic.v1 import BaseModel, validator, ValidationError
22

33
from typing import List, Optional, Tuple
44
from itertools import combinations

src/bloqade/submission/ir/task_results.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from enum import Enum
2-
from pydantic import BaseModel, conlist, conint
2+
from pydantic.v1 import BaseModel, conlist, conint
33
from typing import List, Tuple
44
import numpy as np
55

src/bloqade/submission/ir/task_specification.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from pydantic import BaseModel
1+
from pydantic.v1 import BaseModel
22
from typing import Optional, List, Tuple
33
from decimal import Decimal
44
from bloqade.submission.ir.capabilities import QuEraCapabilities

src/bloqade/submission/quera.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from pydantic import PrivateAttr
1+
from pydantic.v1 import PrivateAttr
22
from bloqade.submission.base import SubmissionBackend, ValidationError
33
from bloqade.submission.ir.task_specification import (
44
QuEraTaskSpecification,

src/bloqade/task/base.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from numpy.typing import NDArray
1212
import pandas as pd
1313
import numpy as np
14-
from pydantic.dataclasses import dataclass
14+
from pydantic.v1.dataclasses import dataclass
1515
from bloqade.submission.ir.parallel import ParallelDecoder
1616
import datetime
1717
from bloqade.visualization import display_report

tests/test_builder.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
# import bloqade.builder.backend as builder_backend
1313
import bloqade.ir.routine.quera as quera
1414
import bloqade.ir.routine.braket as braket
15-
from plum import NotFoundLookupError
1615

1716
from bloqade.ir.control.waveform import to_waveform
1817
from bloqade.ir import rydberg, detuning, hyperfine, rabi
@@ -77,13 +76,13 @@ def test_add_position_dispatch():
7776
with pytest.raises(AssertionError):
7877
start.add_position(position_list, [True])
7978

80-
with pytest.raises(NotFoundLookupError):
79+
with pytest.raises(TypeError):
8180
start.add_position(position_list, True)
8281

83-
with pytest.raises(NotFoundLookupError):
82+
with pytest.raises(TypeError):
8483
start.add_position(position_list, np.array([True, True]))
8584

86-
with pytest.raises(NotFoundLookupError):
85+
with pytest.raises(TypeError):
8786
start.add_position(position, [True, True])
8887

8988

tests/test_scalar.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from pydantic import ValidationError
1+
from pydantic.v1 import ValidationError
22
from bloqade import cast, var
33
import bloqade.ir.scalar as scalar
44
import pytest

0 commit comments

Comments
 (0)