pyopencl 2024.3__cp311-cp311-win_amd64.whl → 2025.2.1__cp311-cp311-win_amd64.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.

Potentially problematic release.


This version of pyopencl might be problematic. Click here for more details.

pyopencl/tools.py CHANGED
@@ -100,6 +100,8 @@ Type aliases
100
100
  See :class:`pyopencl.tools.AllocatorBase`.
101
101
  """
102
102
 
103
+ from __future__ import annotations
104
+
103
105
 
104
106
  __copyright__ = "Copyright (C) 2010 Andreas Kloeckner"
105
107
 
@@ -126,18 +128,27 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
126
128
  OTHER DEALINGS IN THE SOFTWARE.
127
129
  """
128
130
 
131
+
129
132
  import re
130
133
  from abc import ABC, abstractmethod
134
+ from dataclasses import dataclass
131
135
  from sys import intern
132
- from typing import Any, List, Optional, Union
136
+ from typing import (
137
+ TYPE_CHECKING,
138
+ Any,
139
+ Concatenate,
140
+ ParamSpec,
141
+ TypeVar,
142
+ )
133
143
 
134
144
  import numpy as np
145
+ from typing_extensions import TypeIs, override
135
146
 
136
147
  from pytools import memoize, memoize_method
137
148
  from pytools.persistent_dict import KeyBuilder as KeyBuilderBase
138
149
 
139
- from pyopencl._cl import bitlog2, get_cl_header_version # noqa: F401
140
- from pyopencl.compyte.dtypes import ( # noqa: F401
150
+ from pyopencl._cl import bitlog2, get_cl_header_version
151
+ from pyopencl.compyte.dtypes import (
141
152
  TypeNameNotKnown,
142
153
  dtype_to_ctype,
143
154
  get_or_register_dtype,
@@ -145,6 +156,12 @@ from pyopencl.compyte.dtypes import ( # noqa: F401
145
156
  )
146
157
 
147
158
 
159
+ if TYPE_CHECKING:
160
+ from collections.abc import Callable, Hashable, Sequence
161
+
162
+ from numpy.typing import DTypeLike
163
+
164
+
148
165
  # Do not add a pyopencl import here: This will add an import cycle.
149
166
 
150
167
 
@@ -460,11 +477,17 @@ if get_cl_header_version() >= (2, 0):
460
477
 
461
478
  # {{{ first-arg caches
462
479
 
463
- _first_arg_dependent_caches = []
480
+ _first_arg_dependent_caches: list[dict[Hashable, object]] = []
481
+
482
+
483
+ RetT = TypeVar("RetT")
484
+ P = ParamSpec("P")
464
485
 
465
486
 
466
- def first_arg_dependent_memoize(func):
467
- def wrapper(cl_object, *args, **kwargs):
487
+ def first_arg_dependent_memoize(
488
+ func: Callable[Concatenate[object, P], RetT]
489
+ ) -> Callable[Concatenate[object, P], RetT]:
490
+ def wrapper(cl_object: Hashable, *args: P.args, **kwargs: P.kwargs) -> RetT:
468
491
  """Provides memoization for a function. Typically used to cache
469
492
  things that get created inside a :class:`pyopencl.Context`, e.g. programs
470
493
  and kernels. Assumes that the first argument of the decorated function is
@@ -479,12 +502,13 @@ def first_arg_dependent_memoize(func):
479
502
  else:
480
503
  cache_key = (args,)
481
504
 
505
+ ctx_dict: dict[Hashable, dict[Hashable, RetT]]
482
506
  try:
483
- ctx_dict = func._pyopencl_first_arg_dep_memoize_dic
507
+ ctx_dict = func._pyopencl_first_arg_dep_memoize_dic # pyright: ignore[reportFunctionMemberAccess]
484
508
  except AttributeError:
485
509
  # FIXME: This may keep contexts alive longer than desired.
486
510
  # But I guess since the memory in them is freed, who cares.
487
- ctx_dict = func._pyopencl_first_arg_dep_memoize_dic = {}
511
+ ctx_dict = func._pyopencl_first_arg_dep_memoize_dic = {} # pyright: ignore[reportFunctionMemberAccess]
488
512
  _first_arg_dependent_caches.append(ctx_dict)
489
513
 
490
514
  try:
@@ -512,8 +536,6 @@ def first_arg_dependent_memoize_nested(nested_func):
512
536
  :func:`clear_first_arg_caches`.
513
537
 
514
538
  .. versionadded:: 2013.1
515
-
516
- Requires Python 2.5 or newer.
517
539
  """
518
540
 
519
541
  from functools import wraps
@@ -567,6 +589,10 @@ def clear_first_arg_caches():
567
589
  import atexit
568
590
 
569
591
 
592
+ if TYPE_CHECKING:
593
+ import pyopencl as cl
594
+
595
+
570
596
  atexit.register(clear_first_arg_caches)
571
597
 
572
598
  # }}}
@@ -575,7 +601,9 @@ atexit.register(clear_first_arg_caches)
575
601
  # {{{ pytest fixtures
576
602
 
577
603
  class _ContextFactory:
578
- def __init__(self, device):
604
+ device: cl.Device
605
+
606
+ def __init__(self, device: cl.Device):
579
607
  self.device = device
580
608
 
581
609
  def __call__(self):
@@ -590,14 +618,37 @@ class _ContextFactory:
590
618
  import pyopencl as cl
591
619
  return cl.Context([self.device])
592
620
 
593
- def __str__(self):
621
+ @override
622
+ def __str__(self) -> str:
594
623
  # Don't show address, so that parallel test collection works
595
624
  return ("<context factory for <pyopencl.Device '%s' on '%s'>>" %
596
625
  (self.device.name.strip(),
597
626
  self.device.platform.name.strip()))
598
627
 
599
628
 
600
- def get_test_platforms_and_devices(plat_dev_string=None):
629
+ DeviceOrPlatformT = TypeVar("DeviceOrPlatformT", "cl.Device", "cl.Platform")
630
+
631
+
632
+ def _find_cl_obj(
633
+ objs: Sequence[DeviceOrPlatformT],
634
+ identifier: str
635
+ ) -> DeviceOrPlatformT:
636
+ try:
637
+ num = int(identifier)
638
+ except Exception:
639
+ pass
640
+ else:
641
+ return objs[num]
642
+
643
+ for obj in objs:
644
+ if identifier.lower() in (obj.name + " " + obj.vendor).lower():
645
+ return obj
646
+ raise RuntimeError("object '%s' not found" % identifier)
647
+
648
+
649
+ def get_test_platforms_and_devices(
650
+ plat_dev_string: str | None = None
651
+ ):
601
652
  """Parse a string of the form 'PYOPENCL_TEST=0:0,1;intel:i5'.
602
653
 
603
654
  :return: list of tuples (platform, [device, device, ...])
@@ -609,29 +660,14 @@ def get_test_platforms_and_devices(plat_dev_string=None):
609
660
  import os
610
661
  plat_dev_string = os.environ.get("PYOPENCL_TEST", None)
611
662
 
612
- def find_cl_obj(objs, identifier):
613
- try:
614
- num = int(identifier)
615
- except Exception:
616
- pass
617
- else:
618
- return objs[num]
619
-
620
- found = False
621
- for obj in objs:
622
- if identifier.lower() in (obj.name + " " + obj.vendor).lower():
623
- return obj
624
- if not found:
625
- raise RuntimeError("object '%s' not found" % identifier)
626
-
627
663
  if plat_dev_string:
628
- result = []
664
+ result: list[tuple[cl.Platform, list[cl.Device]]] = []
629
665
 
630
666
  for entry in plat_dev_string.split(";"):
631
667
  lhsrhs = entry.split(":")
632
668
 
633
669
  if len(lhsrhs) == 1:
634
- platform = find_cl_obj(cl.get_platforms(), lhsrhs[0])
670
+ platform = _find_cl_obj(cl.get_platforms(), lhsrhs[0])
635
671
  result.append((platform, platform.get_devices()))
636
672
 
637
673
  elif len(lhsrhs) != 2:
@@ -639,11 +675,11 @@ def get_test_platforms_and_devices(plat_dev_string=None):
639
675
  else:
640
676
  plat_str, dev_strs = lhsrhs
641
677
 
642
- platform = find_cl_obj(cl.get_platforms(), plat_str)
678
+ platform = _find_cl_obj(cl.get_platforms(), plat_str)
643
679
  devs = platform.get_devices()
644
680
  result.append(
645
681
  (platform,
646
- [find_cl_obj(devs, dev_id)
682
+ [_find_cl_obj(devs, dev_id)
647
683
  for dev_id in dev_strs.split(",")]))
648
684
 
649
685
  return result
@@ -748,44 +784,33 @@ class Argument(ABC):
748
784
  pass
749
785
 
750
786
 
751
- class DtypedArgument(Argument):
787
+ @dataclass(frozen=True, init=False)
788
+ class DtypedArgument(Argument, ABC):
752
789
  """
753
- .. attribute:: name
754
- .. attribute:: dtype
790
+ .. autoattribute:: name
791
+ .. autoattribute:: dtype
755
792
  """
793
+ dtype: np.dtype[Any]
794
+ name: str
756
795
 
757
- def __init__(self, dtype: Any, name: str) -> None:
758
- self.dtype = np.dtype(dtype)
759
- self.name = name
760
-
761
- def __repr__(self) -> str:
762
- return "{}({!r}, {})".format(
763
- self.__class__.__name__,
764
- self.name,
765
- self.dtype)
766
-
767
- def __eq__(self, other: Any) -> bool:
768
- return (type(self) is type(other)
769
- and self.dtype == other.dtype
770
- and self.name == other.name)
771
-
772
- def __hash__(self) -> int:
773
- return (
774
- hash(type(self))
775
- ^ hash(self.dtype)
776
- ^ hash(self.name))
796
+ def __init__(self, dtype: DTypeLike, name: str) -> None:
797
+ object.__setattr__(self, "name", name)
798
+ object.__setattr__(self, "dtype", np.dtype(dtype))
777
799
 
778
800
 
801
+ @dataclass(frozen=True)
779
802
  class VectorArg(DtypedArgument):
780
803
  """Inherits from :class:`DtypedArgument`.
781
804
 
782
805
  .. automethod:: __init__
783
806
  """
807
+ with_offset: bool
784
808
 
785
- def __init__(self, dtype: Any, name: str, with_offset: bool = False) -> None:
786
- super().__init__(dtype, name)
787
- self.with_offset = with_offset
809
+ def __init__(self, name: str, dtype: DTypeLike, with_offset: bool = False):
810
+ super().__init__(name, dtype)
811
+ object.__setattr__(self, "with_offset", with_offset)
788
812
 
813
+ @override
789
814
  def declarator(self) -> str:
790
815
  if self.with_offset:
791
816
  # Two underscores -> less likelihood of a name clash.
@@ -796,40 +821,25 @@ class VectorArg(DtypedArgument):
796
821
 
797
822
  return result
798
823
 
799
- def __eq__(self, other) -> bool:
800
- return (super().__eq__(other)
801
- and self.with_offset == other.with_offset)
802
-
803
- def __hash__(self) -> int:
804
- return super().__hash__() ^ hash(self.with_offset)
805
-
806
824
 
825
+ @dataclass(frozen=True, init=False)
807
826
  class ScalarArg(DtypedArgument):
808
827
  """Inherits from :class:`DtypedArgument`."""
809
828
 
810
- def declarator(self):
829
+ @override
830
+ def declarator(self) -> str:
811
831
  return "{} {}".format(dtype_to_ctype(self.dtype), self.name)
812
832
 
813
833
 
834
+ @dataclass(frozen=True)
814
835
  class OtherArg(Argument):
815
- def __init__(self, declarator: str, name: str) -> None:
816
- self.decl = declarator
817
- self.name = name
836
+ decl: str
837
+ name: str
818
838
 
839
+ @override
819
840
  def declarator(self) -> str:
820
841
  return self.decl
821
842
 
822
- def __eq__(self, other) -> bool:
823
- return (type(self) is type(other)
824
- and self.decl == other.decl
825
- and self.name == other.name)
826
-
827
- def __hash__(self) -> int:
828
- return (
829
- hash(type(self))
830
- ^ hash(self.decl)
831
- ^ hash(self.name))
832
-
833
843
 
834
844
  def parse_c_arg(c_arg: str, with_offset: bool = False) -> DtypedArgument:
835
845
  for aspace in ["__local", "__constant"]:
@@ -850,8 +860,8 @@ def parse_c_arg(c_arg: str, with_offset: bool = False) -> DtypedArgument:
850
860
 
851
861
 
852
862
  def parse_arg_list(
853
- arguments: Union[str, List[str], List[DtypedArgument]],
854
- with_offset: bool = False) -> List[DtypedArgument]:
863
+ arguments: str | list[str] | list[DtypedArgument],
864
+ with_offset: bool = False) -> list[DtypedArgument]:
855
865
  """Parse a list of kernel arguments. *arguments* may be a comma-separate
856
866
  list of C declarators in a string, a list of strings representing C
857
867
  declarators, or :class:`Argument` objects.
@@ -860,7 +870,7 @@ def parse_arg_list(
860
870
  if isinstance(arguments, str):
861
871
  arguments = arguments.split(",")
862
872
 
863
- def parse_single_arg(obj: Union[str, DtypedArgument]) -> DtypedArgument:
873
+ def parse_single_arg(obj: str | DtypedArgument) -> DtypedArgument:
864
874
  if isinstance(obj, str):
865
875
  from pyopencl.tools import parse_c_arg
866
876
  return parse_c_arg(obj, with_offset=with_offset)
@@ -886,9 +896,9 @@ def get_arg_list_arg_types(arg_types):
886
896
 
887
897
 
888
898
  def get_arg_list_scalar_arg_dtypes(
889
- arg_types: List[DtypedArgument]
890
- ) -> List[Optional[np.dtype]]:
891
- result: List[Optional[np.dtype]] = []
899
+ arg_types: Sequence[DtypedArgument]
900
+ ) -> list[np.dtype | None]:
901
+ result: list[np.dtype | None] = []
892
902
 
893
903
  for arg_type in arg_types:
894
904
  if isinstance(arg_type, ScalarArg):
@@ -903,8 +913,8 @@ def get_arg_list_scalar_arg_dtypes(
903
913
  return result
904
914
 
905
915
 
906
- def get_arg_offset_adjuster_code(arg_types):
907
- result = []
916
+ def get_arg_offset_adjuster_code(arg_types: Sequence[Argument]) -> str:
917
+ result: list[str] = []
908
918
 
909
919
  for arg_type in arg_types:
910
920
  if isinstance(arg_type, VectorArg) and arg_type.with_offset:
@@ -1181,7 +1191,8 @@ def match_dtype_to_c_struct(device, name, dtype, context=None):
1181
1191
  def calc_field_type():
1182
1192
  total_size = 0
1183
1193
  padding_count = 0
1184
- for offset, (field_name, (field_dtype, _)) in zip(offsets, fields):
1194
+ for offset, (field_name, (field_dtype, _)) in zip(
1195
+ offsets, fields, strict=True):
1185
1196
  if offset > total_size:
1186
1197
  padding_count += 1
1187
1198
  yield ("__pycl_padding%d" % padding_count,
@@ -1497,7 +1508,7 @@ def array_module(a):
1497
1508
  # }}}
1498
1509
 
1499
1510
 
1500
- def is_spirv(s):
1511
+ def is_spirv(s: str | bytes) -> TypeIs[bytes]:
1501
1512
  spirv_magic = b"\x07\x23\x02\x03"
1502
1513
  return (
1503
1514
  isinstance(s, bytes)
@@ -1524,4 +1535,31 @@ class _NumpyTypesKeyBuilder(KeyBuilderBase):
1524
1535
 
1525
1536
  # }}}
1526
1537
 
1538
+
1539
+ __all__ = [
1540
+ "AllocatorBase",
1541
+ "AllocatorBase",
1542
+ "Argument",
1543
+ "DeferredAllocator",
1544
+ "DtypedArgument",
1545
+ "ImmediateAllocator",
1546
+ "MemoryPool",
1547
+ "OtherArg",
1548
+ "PooledBuffer",
1549
+ "PooledSVM",
1550
+ "SVMAllocator",
1551
+ "SVMPool",
1552
+ "ScalarArg",
1553
+ "TypeNameNotKnown",
1554
+ "VectorArg",
1555
+ "bitlog2",
1556
+ "clear_first_arg_caches",
1557
+ "dtype_to_ctype",
1558
+ "first_arg_dependent_memoize",
1559
+ "get_or_register_dtype",
1560
+ "parse_arg_list",
1561
+ "pytest_generate_tests_for_pyopencl",
1562
+ "register_dtype",
1563
+ ]
1564
+
1527
1565
  # vim: foldmethod=marker
pyopencl/typing.py ADDED
@@ -0,0 +1,52 @@
1
+ from __future__ import annotations
2
+
3
+
4
+ __copyright__ = "Copyright (C) 2025 University of Illinois Board of Trustees"
5
+
6
+ __license__ = """
7
+ Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ of this software and associated documentation files (the "Software"), to deal
9
+ in the Software without restriction, including without limitation the rights
10
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ copies of the Software, and to permit persons to whom the Software is
12
+ furnished to do so, subject to the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be included in
15
+ all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
+ THE SOFTWARE.
24
+ """
25
+
26
+ from collections.abc import Sequence
27
+ from typing import TYPE_CHECKING, Any, TypeAlias, TypeVar
28
+
29
+ import numpy as np
30
+ from numpy.typing import NDArray
31
+ from typing_extensions import Buffer as abc_Buffer
32
+
33
+
34
+ if TYPE_CHECKING:
35
+ import pyopencl as _cl
36
+
37
+
38
+ DTypeT = TypeVar("DTypeT", bound=np.dtype[Any])
39
+
40
+ HasBufferInterface: TypeAlias = abc_Buffer | NDArray[Any]
41
+ SVMInnerT = TypeVar("SVMInnerT", bound=HasBufferInterface)
42
+ WaitList: TypeAlias = Sequence["_cl.Event"] | None
43
+ KernelArg: TypeAlias = """
44
+ int
45
+ | float
46
+ | complex
47
+ | HasBufferInterface
48
+ | np.generic
49
+ | _cl.Buffer
50
+ | _cl.Image
51
+ | _cl.Sampler
52
+ | _cl.SVMPointer"""
pyopencl/version.py CHANGED
@@ -1,9 +1,11 @@
1
+ from __future__ import annotations
2
+
1
3
  import re
2
4
  from importlib import metadata
3
5
 
4
6
 
5
7
  VERSION_TEXT = metadata.version("pyopencl")
6
- _match = re.match("^([0-9.]+)([a-z0-9]*?)$", VERSION_TEXT)
8
+ _match = re.match(r"^([0-9.]+)([a-z0-9]*?)$", VERSION_TEXT)
7
9
  assert _match is not None
8
10
  VERSION_STATUS = _match.group(2)
9
11
  VERSION = tuple(int(nr) for nr in _match.group(1).split("."))
@@ -1,14 +1,14 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: pyopencl
3
- Version: 2024.3
3
+ Version: 2025.2.1
4
4
  Summary: Python wrapper for OpenCL
5
5
  Author-Email: Andreas Kloeckner <inform@tiker.net>
6
+ License-Expression: MIT
6
7
  Classifier: Development Status :: 5 - Production/Stable
7
8
  Classifier: Environment :: Console
8
9
  Classifier: Intended Audience :: Developers
9
10
  Classifier: Intended Audience :: Other Audience
10
11
  Classifier: Intended Audience :: Science/Research
11
- Classifier: License :: OSI Approved :: MIT License
12
12
  Classifier: Natural Language :: English
13
13
  Classifier: Programming Language :: C++
14
14
  Classifier: Programming Language :: Python
@@ -19,21 +19,22 @@ Classifier: Topic :: Scientific/Engineering :: Physics
19
19
  Project-URL: Documentation, https://documen.tician.de/pyopencl
20
20
  Project-URL: Homepage, https://mathema.tician.de/software/pyopencl
21
21
  Project-URL: Repository, https://github.com/inducer/pyopencl
22
- Requires-Python: ~=3.8
22
+ Requires-Python: ~=3.10
23
23
  Requires-Dist: importlib-resources; python_version < "3.9"
24
24
  Requires-Dist: numpy
25
25
  Requires-Dist: platformdirs>=2.2
26
- Requires-Dist: pytools>=2024.1.5
26
+ Requires-Dist: pytools>=2025.1.6
27
+ Requires-Dist: typing_extensions>=4.6
28
+ Provides-Extra: oclgrind
27
29
  Requires-Dist: oclgrind-binary-distribution>=18.3; extra == "oclgrind"
30
+ Provides-Extra: pocl
28
31
  Requires-Dist: pocl-binary-distribution>=1.2; extra == "pocl"
32
+ Provides-Extra: test
29
33
  Requires-Dist: ruff; extra == "test"
30
34
  Requires-Dist: mako; extra == "test"
31
35
  Requires-Dist: mypy; extra == "test"
32
36
  Requires-Dist: pylint; extra == "test"
33
37
  Requires-Dist: pytest>=7; extra == "test"
34
- Provides-Extra: oclgrind
35
- Provides-Extra: pocl
36
- Provides-Extra: test
37
38
  Description-Content-Type: text/x-rst
38
39
 
39
40
  PyOpenCL: Pythonic Access to OpenCL, with Arrays and Algorithms
@@ -42,9 +43,9 @@ PyOpenCL: Pythonic Access to OpenCL, with Arrays and Algorithms
42
43
  .. |badge-gitlab-ci| image:: https://gitlab.tiker.net/inducer/pyopencl/badges/main/pipeline.svg
43
44
  :alt: Gitlab Build Status
44
45
  :target: https://gitlab.tiker.net/inducer/pyopencl/commits/main
45
- .. |badge-github-ci| image:: https://github.com/inducer/pyopencl/workflows/CI/badge.svg?branch=main&event=push
46
+ .. |badge-github-ci| image:: https://github.com/inducer/pyopencl/actions/workflows/ci.yml/badge.svg
46
47
  :alt: Github Build Status
47
- :target: https://github.com/inducer/pyopencl/actions?query=branch%3Amain+workflow%3ACI+event%3Apush
48
+ :target: https://github.com/inducer/pyopencl/actions/workflows/ci.yml
48
49
  .. |badge-pypi| image:: https://badge.fury.io/py/pyopencl.svg
49
50
  :alt: Python Package Index Release Page
50
51
  :target: https://pypi.org/project/pyopencl/
@@ -0,0 +1,46 @@
1
+ pyopencl/__init__.py,sha256=tF-6Bz22ydaM-nymBImLy7EajeklT_CQgdQNFIFWEl0,64721
2
+ pyopencl/_cl.cp311-win_amd64.pyd,sha256=_mkZirJDgf7oyhF92YkEXzuR8Z4G7qUqjEpMK7zH_aM,633344
3
+ pyopencl/_cl.pyi,sha256=QnCqG_fjW3VyUQsxcdcZ8M3ZePQ1BtA4XWFfgjfwGPg,58241
4
+ pyopencl/_cluda.py,sha256=zlp4ECLzlQOF5ERjXeDJ6j5wYsxPm3VAYwd7adnNYo0,2168
5
+ pyopencl/_monkeypatch.py,sha256=EyC-4DeFCaSBKQ00kJZxF6z-e44P-XSL6xAN2X0oDXM,35908
6
+ pyopencl/_mymako.py,sha256=Ki5F6iY5oAdm_R6Mll-ltbO-DZF37FDEINimG2HRyRY,674
7
+ pyopencl/algorithm.py,sha256=Gx7xqny_g7SA56gbApRdWUvm8UHWJDNvkdL1L3eQ4rY,52824
8
+ pyopencl/array.py,sha256=QImtVkujKnC93uOtZvFIXes8Rlp4e1S9-gVqNtxwfm4,112961
9
+ pyopencl/bitonic_sort.py,sha256=RQUC8tpezdTQGzSEFyue86gVjc76vLKDwaNkqi4afa8,8297
10
+ pyopencl/bitonic_sort_templates.py,sha256=RQaGOQf7f3f4FPX80h4rxOq3_gAq0e6OKaZIuBjcoUI,16785
11
+ pyopencl/cache.py,sha256=R_EW9ekoMe9V4Am6MbIgtnMm-BbRQyWZgzfscKEtkB0,16552
12
+ pyopencl/capture_call.py,sha256=wbZ2Qb1HlI8avDfiQFmbsYgQqCi_hLoPFJEnTC0P-g4,6679
13
+ pyopencl/characterize/__init__.py,sha256=9UMNUa9_uHsV9VA3mDHhmBX8zcYysqwGSQKEXW6Liv0,15028
14
+ pyopencl/characterize/performance.py,sha256=MJk7wj4oqp-lRXhn0oXJN2sxXrPJyboPiV16O-ST7PQ,7143
15
+ pyopencl/cl/pyopencl-airy.cl,sha256=HSUEWbUN2MNzuhvDP3LB9dVY_3dhjFSWXhvGQsrA8VA,8446
16
+ pyopencl/cl/pyopencl-bessel-j-complex.cl,sha256=XOUBUZFxgra9nUAymnbJugcOa1lQyj-fwiZA9ly3rdI,6264
17
+ pyopencl/cl/pyopencl-bessel-j.cl,sha256=V16uWa8t1b0oxNHRCLhCqxzR-28yr-5ZslqHkw2Ved0,24358
18
+ pyopencl/cl/pyopencl-bessel-y.cl,sha256=kD6u2qtgmrNNq75w5uaxHdrvb6oeeTPgrGpF29ERsuE,12732
19
+ pyopencl/cl/pyopencl-complex.h,sha256=DHFUM2sHCv50m4LJvvIpF8sMWc5yOO6kYu9nWlScl6A,8847
20
+ pyopencl/cl/pyopencl-eval-tbl.cl,sha256=SDYB_RkW7jtN_Y_xhCbwGjBSNmBpMg8T4ZXlrP_2q9U,2736
21
+ pyopencl/cl/pyopencl-hankel-complex.cl,sha256=yrxPF4wgr9bTzG4SyJsVbij5SODoJvWaDRDDuo4zrs4,32005
22
+ pyopencl/cl/pyopencl-random123/array.h,sha256=oTYPJfU7s4IXy8xRc3H0rqMq4mgyVxd7UuLSf3liUPY,17413
23
+ pyopencl/cl/pyopencl-random123/openclfeatures.h,sha256=jauJ1WEspr-YNefAuUwPhapl_JQDVa6my_h4fLl-p4o,2974
24
+ pyopencl/cl/pyopencl-random123/philox.cl,sha256=KqPbLt54UwrHPvBe7v4ZMzqI2oGrzp0c0QzqVhydNCY,22226
25
+ pyopencl/cl/pyopencl-random123/threefry.cl,sha256=bC78-HJVuc4AFiNppglDQiN8cZRD45hG1PPdi4Sdt-o,55563
26
+ pyopencl/clmath.py,sha256=XxPDJkWebN3_qTnohXnPuSv8D6dIYQME9R3ObQEUcs4,8540
27
+ pyopencl/clrandom.py,sha256=ozqtoMU9-68DaLDR6SEpjq0rPZ-UeqQuJU-vlp_y2eA,13493
28
+ pyopencl/cltypes.py,sha256=gjRNaTQKQvyWI2ObF-BczGqEIAcgu_SzoW1-_22YLCY,6247
29
+ pyopencl/compyte/.gitignore,sha256=PFMRSJycIqPtcpEn7VqbcenWJqHFDuYtwQm_tLbADt8,189
30
+ pyopencl/compyte/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
+ pyopencl/compyte/array.py,sha256=3V7o2uIzebJ3H-g23NP2qe5DGXAkuoLYaQJtKcXc6yU,7594
32
+ pyopencl/compyte/dtypes.py,sha256=HNNh35QPyhsWn-BzvidltBA3Hi72XGlW3-62vRp-bkc,10201
33
+ pyopencl/compyte/pyproject.toml,sha256=y_MOlhePlmLI24oycBBDKqDpfePj2U_fju4mOcbV4GI,756
34
+ pyopencl/elementwise.py,sha256=9VOX-sg8vkPne3PGROxuXLSf1FeQ8E8uGKRYvxrRIg4,39852
35
+ pyopencl/invoker.py,sha256=hMmVaXOgmOjTjCI6Evjx4x_c8FrbBPlClFGCqirAtOE,14123
36
+ pyopencl/ipython_ext.py,sha256=Hfx5go15On4B0CRDuZcsa3d-lme4-xPNHPdgEa9fbJ8,2021
37
+ pyopencl/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
+ pyopencl/reduction.py,sha256=PUd_5n0ZShiNs8s-Cy4_fqfEiZLx9LICSCuo9wrwe60,26295
39
+ pyopencl/scan.py,sha256=tmYbMbSx0CfilgZoRzbROX9TbjptPCxHD-WDUx11uTg,67535
40
+ pyopencl/tools.py,sha256=jLvZAjCBJKwN0Wg_jH9XAObvqIJh-haz_VXpFSfXB1M,48161
41
+ pyopencl/typing.py,sha256=QJTJMuVZ7C5og65xT8s0VJQ6AibQ-Vz7DoEk-vmeg84,1857
42
+ pyopencl/version.py,sha256=Z5G_fsr_KVWqiYzK_pOQ2PbAO20wrFlEuqqKBGiAv4I,315
43
+ pyopencl-2025.2.1.dist-info/METADATA,sha256=ZWuBJXxGy78MiQ68EB8rPStHxAZ7PNgk5LJqDH2OFbg,4756
44
+ pyopencl-2025.2.1.dist-info/WHEEL,sha256=snOjF3_Qdfl83AvEPF_jBYJIRsss89-Tk83TV05TAGs,106
45
+ pyopencl-2025.2.1.dist-info/licenses/LICENSE,sha256=jib9h6nV8oAvCkKPKDecpLakmQi1SktCn4YXmllgySY,15566
46
+ pyopencl-2025.2.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: scikit-build-core 0.10.7
2
+ Generator: scikit-build-core 0.11.4
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp311-cp311-win_amd64
5
5
 
@@ -1,42 +0,0 @@
1
- pyopencl/__init__.py,sha256=wCR09HsGaQ532Dc5vdU8WiyZGZ0qtHBbJQrPQMEGpYI,83853
2
- pyopencl/_cl.cp311-win_amd64.pyd,sha256=UXxsO8CNEkppDzva8VK98YUSbskdMmkil0FZCnSbUUE,580096
3
- pyopencl/_cluda.py,sha256=5coLt4eR5BOLgfUesgnaTx_nUhZ6BBhYi9dodvl7cbc,2128
4
- pyopencl/_mymako.py,sha256=55mRxOnOH9N7ltPWPND19GD4cszQrB2dhiMUlouoWKU,634
5
- pyopencl/algorithm.py,sha256=7ilnIG3c4YMDUBP4w4e10UMDHj9nbFITg1oLnEEsej0,52742
6
- pyopencl/array.py,sha256=Ij8euQy7zxxyxyjw7IM841K0MirNV5Zgr690_wMWmAA,115210
7
- pyopencl/bitonic_sort.py,sha256=r5Jy-C7LE5ml-Qt0KwD4E0g-Cf4DwpmO_3d25KLNUwY,8263
8
- pyopencl/bitonic_sort_templates.py,sha256=XQjUiHS9KjFIUYIil1Ls9293hy751AOsJmszlNS-IFk,16745
9
- pyopencl/cache.py,sha256=HMS-dEURWulvFOzEY33LzNSw3notDY_Rsv_L16OiSuo,16535
10
- pyopencl/capture_call.py,sha256=3zldPy-ssAchA9Q0ntDDcao2zMPWK9wDPdjdYj4CrIk,5871
11
- pyopencl/characterize/__init__.py,sha256=rBhH9M6wkp2fYs51vx9BHgNVl-N1Vz_2ofV0uhPsGk0,14802
12
- pyopencl/characterize/performance.py,sha256=xwyt4SsABo4LipXzjRF7TKz8LVBcLmZZ5os6f7hp3Go,7103
13
- pyopencl/cl/pyopencl-airy.cl,sha256=HSUEWbUN2MNzuhvDP3LB9dVY_3dhjFSWXhvGQsrA8VA,8446
14
- pyopencl/cl/pyopencl-bessel-j-complex.cl,sha256=XOUBUZFxgra9nUAymnbJugcOa1lQyj-fwiZA9ly3rdI,6264
15
- pyopencl/cl/pyopencl-bessel-j.cl,sha256=V16uWa8t1b0oxNHRCLhCqxzR-28yr-5ZslqHkw2Ved0,24358
16
- pyopencl/cl/pyopencl-bessel-y.cl,sha256=kD6u2qtgmrNNq75w5uaxHdrvb6oeeTPgrGpF29ERsuE,12732
17
- pyopencl/cl/pyopencl-complex.h,sha256=DHFUM2sHCv50m4LJvvIpF8sMWc5yOO6kYu9nWlScl6A,8847
18
- pyopencl/cl/pyopencl-eval-tbl.cl,sha256=SDYB_RkW7jtN_Y_xhCbwGjBSNmBpMg8T4ZXlrP_2q9U,2736
19
- pyopencl/cl/pyopencl-hankel-complex.cl,sha256=yrxPF4wgr9bTzG4SyJsVbij5SODoJvWaDRDDuo4zrs4,32005
20
- pyopencl/cl/pyopencl-random123/array.h,sha256=oTYPJfU7s4IXy8xRc3H0rqMq4mgyVxd7UuLSf3liUPY,17413
21
- pyopencl/cl/pyopencl-random123/openclfeatures.h,sha256=jauJ1WEspr-YNefAuUwPhapl_JQDVa6my_h4fLl-p4o,2974
22
- pyopencl/cl/pyopencl-random123/philox.cl,sha256=KqPbLt54UwrHPvBe7v4ZMzqI2oGrzp0c0QzqVhydNCY,22226
23
- pyopencl/cl/pyopencl-random123/threefry.cl,sha256=bC78-HJVuc4AFiNppglDQiN8cZRD45hG1PPdi4Sdt-o,55563
24
- pyopencl/clmath.py,sha256=GL9s0YwKpCgvsGl6ndoWXEngPFWAqRRR_HOoQm57OA8,8502
25
- pyopencl/clrandom.py,sha256=baRE9GgAqGcp2xy9FgI0E4oEygLqyjZqwIs6YvB35ok,13453
26
- pyopencl/cltypes.py,sha256=2jCvMMBtkhXxfbBFBfM4NSFKRg7kEo1tlwGJQlyiwmQ,4955
27
- pyopencl/compyte/.gitignore,sha256=PFMRSJycIqPtcpEn7VqbcenWJqHFDuYtwQm_tLbADt8,189
28
- pyopencl/compyte/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
- pyopencl/compyte/array.py,sha256=IJzw-dSS_injEiLVNHLlSRi0R2F1sO_8xeeK-XezsSo,7636
30
- pyopencl/compyte/dtypes.py,sha256=wjJy3pXU6mdYmlFeX-8VM97gH37S5VmMVE1PBNo9om8,10133
31
- pyopencl/compyte/pyproject.toml,sha256=pcYndN5KAcdZXgsBUiH3VyeMxrV-oesECjS7yGCaY4I,1272
32
- pyopencl/elementwise.py,sha256=cqUtTgSCys1Z__gOCqyOXYnzPU-jdGz5NKZ9pkaF4oE,39796
33
- pyopencl/invoker.py,sha256=gTnJQN4_fJ9-3_wKqXfWVpDKzstD2jgYu5qxzPKXdY4,14481
34
- pyopencl/ipython_ext.py,sha256=e-K-Yjd6sTP9-9d69v0k_1_ifdK77JWMhbynn1FBDH4,1983
35
- pyopencl/reduction.py,sha256=QoXRhi2_RjUpGDhcfWiMzHHXoBZJuRncnBTn5xwJgR4,26319
36
- pyopencl/scan.py,sha256=5YoKCBdIHoPha9onGna_65ne2maU0RZ7nR7X2L47YrA,67553
37
- pyopencl/tools.py,sha256=Pzjm7juH52NZ5fF7ppgCy-p9kR-Jhtw8xqnh-qCEjfs,47467
38
- pyopencl/version.py,sha256=Fp_v5G59_24Um9NujHpex3VRwdffKTwtN8tjiQl5QOQ,276
39
- pyopencl-2024.3.dist-info/METADATA,sha256=3Y2AW8BahKcnAPNcX0jR65xiQPsUluv8sTbrVsCtZZc,4783
40
- pyopencl-2024.3.dist-info/WHEEL,sha256=kXCl1J14PkmxQKXf5U_5vxmme_OmC3Ydcral7u0yA3M,106
41
- pyopencl-2024.3.dist-info/licenses/LICENSE,sha256=jib9h6nV8oAvCkKPKDecpLakmQi1SktCn4YXmllgySY,15566
42
- pyopencl-2024.3.dist-info/RECORD,,