Skip to content

Commit 5d8b2d7

Browse files
authored
Construct instance of appropriate class in Event._init and Stream._init (#752)
* Construct instance of appropriate class in Event._init * Add a test for Event subclassing * Fix Stream construction and add tests --------- Co-authored-by: Ashwin Srinath <shwina@users.noreply.github.com>
1 parent 94a4a5a commit 5d8b2d7

4 files changed

Lines changed: 41 additions & 4 deletions

File tree

cuda_core/cuda/core/experimental/_event.pyx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ cdef class Event:
8989

9090
@classmethod
9191
def _init(cls, device_id: int, ctx_handle: Context, options=None):
92-
cdef Event self = Event.__new__(Event)
92+
cdef Event self = Event.__new__(cls)
9393
cdef EventOptions opts = check_or_create_options(EventOptions, options, "Event options")
9494
flags = 0x0
9595
self._timing_disabled = False

cuda_core/cuda/core/experimental/_stream.pyx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ cdef class Stream:
122122

123123
@classmethod
124124
def _legacy_default(cls):
125-
cdef Stream self = Stream.__new__(Stream)
125+
cdef Stream self = Stream.__new__(cls)
126126
self._handle = driver.CUstream(driver.CU_STREAM_LEGACY)
127127
self._owner = None
128128
self._builtin = True
@@ -134,7 +134,7 @@ cdef class Stream:
134134

135135
@classmethod
136136
def _per_thread_default(cls):
137-
cdef Stream self = Stream.__new__(Stream)
137+
cdef Stream self = Stream.__new__(cls)
138138
self._handle = driver.CUstream(driver.CU_STREAM_PER_THREAD)
139139
self._owner = None
140140
self._builtin = True
@@ -146,7 +146,7 @@ cdef class Stream:
146146

147147
@classmethod
148148
def _init(cls, obj: Optional[IsStreamT] = None, options=None, device_id: int = None):
149-
cdef Stream self = Stream.__new__(Stream)
149+
cdef Stream self = Stream.__new__(cls)
150150
self._handle = None
151151
self._owner = None
152152
self._builtin = False

cuda_core/tests/test_event.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import cuda.core.experimental
1515
from cuda.core.experimental import (
1616
Device,
17+
Event,
1718
EventOptions,
1819
LaunchConfig,
1920
LegacyPinnedMemoryResource,
@@ -191,3 +192,13 @@ def test_event_context(init_cuda):
191192
event = Device().create_event(options=EventOptions())
192193
context = event.context
193194
assert context is not None
195+
196+
197+
def test_event_subclassing():
198+
class MyEvent(Event):
199+
pass
200+
201+
dev = Device()
202+
dev.set_current()
203+
event = MyEvent._init(dev.device_id, dev.context)
204+
assert isinstance(event, MyEvent)

cuda_core/tests/test_stream.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,29 @@ def test_per_thread_default_stream():
111111
def test_default_stream():
112112
stream = default_stream()
113113
assert isinstance(stream, Stream)
114+
115+
116+
def test_stream_subclassing(init_cuda):
117+
class MyStream(Stream):
118+
pass
119+
120+
dev = Device()
121+
dev.set_current()
122+
stream = MyStream._init(options=StreamOptions(), device_id=dev.device_id)
123+
assert isinstance(stream, MyStream)
124+
125+
126+
def test_stream_legacy_default_subclassing():
127+
class MyStream(Stream):
128+
pass
129+
130+
stream = MyStream._legacy_default()
131+
assert isinstance(stream, MyStream)
132+
133+
134+
def test_stream_per_thread_default_subclassing():
135+
class MyStream(Stream):
136+
pass
137+
138+
stream = MyStream._per_thread_default()
139+
assert isinstance(stream, MyStream)

0 commit comments

Comments
 (0)