Skip to content

Commit 8c6e99c

Browse files
Merge remote-tracking branch 'origin/master' into dedicated-roll-kernel
2 parents 64fa95e + a9064ee commit 8c6e99c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+652
-356
lines changed

.github/workflows/conda-package.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,11 @@ jobs:
608608
echo "Array API standard conformance tests failed to run for dpctl=$PACKAGE_VERSION."
609609
exit 1
610610
fi
611+
- name: Output API summary
612+
shell: bash -l {0}
613+
run: echo "::notice ${{ env.MESSAGE }}"
611614
- name: Post result to PR
615+
if: ${{ github.event.pull_request && !github.event.pull_request.head.repo.fork }}
612616
uses: mshick/add-pr-comment@v1
613617
with:
614618
message: |

.github/workflows/generate-docs.yml

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ jobs:
7676
mv ../cmake-install/docs/docs ~/docs
7777
git clean -dfx
7878
- name: Publish docs
79-
if: ${{ github.ref == 'refs/heads/master' }}
79+
if: ${{ github.event.pull_request && !github.event.pull_request.head.repo.fork && github.ref == 'refs/heads/master' }}
8080
shell: bash -l {0}
8181
run: |
8282
git remote add tokened_docs https://IntelPython:${{ secrets.GITHUB_TOKEN }}@github.com/IntelPython/dpctl.git
@@ -91,8 +91,15 @@ jobs:
9191
git config --global user.email 'github-actions[doc-deploy-bot]@users.noreply.github.com'
9292
git commit -m "Latest docs."
9393
git push tokened_docs gh-pages
94+
- name: Save built docs as an artifact
95+
if: ${{ github.event.pull_request && github.event.pull_request.head.repo.fork && github.event.action != 'closed'}}
96+
uses: actions/upload-artifact@v3
97+
with:
98+
name: ${{ env.PACKAGE_NAME }} rendered documentation
99+
path: ~/docs
100+
94101
- name: Publish pull-request docs
95-
if: ${{ github.event.pull_request && github.event.action != 'closed' }}
102+
if: ${{ github.event.pull_request && !github.event.pull_request.head.repo.fork && github.event.action != 'closed' }}
96103
env:
97104
PR_NUM: ${{ github.event.number }}
98105
shell: bash -l {0}
@@ -111,7 +118,7 @@ jobs:
111118
git commit -m "Docs for pull request ${PR_NUM}"
112119
git push tokened_docs gh-pages
113120
- name: Unpublish pull-request docs
114-
if: ${{ github.event.pull_request && github.event.action == 'closed' }}
121+
if: ${{ github.event.pull_request && !github.event.pull_request.head.repo.fork && github.event.action == 'closed' }}
115122
env:
116123
PR_NUM: ${{ github.event.number }}
117124
shell: bash -l {0}
@@ -128,7 +135,7 @@ jobs:
128135
git commit -m "Removing docs for closed pull request ${PR_NUM}"
129136
git push tokened_docs gh-pages
130137
- name: Comment with URL to published pull-request docs
131-
if: ${{ github.event.pull_request && github.event.action != 'closed' }}
138+
if: ${{ github.event.pull_request && !github.event.pull_request.head.repo.fork && github.event.action != 'closed' }}
132139
env:
133140
PR_NUM: ${{ github.event.number }}
134141
uses: mshick/add-pr-comment@v1
@@ -138,7 +145,7 @@ jobs:
138145
repo-token: ${{ secrets.GITHUB_TOKEN }}
139146
repo-token-user-login: 'github-actions[bot]'
140147
- name: Comment with URL about removal of PR docs
141-
if: ${{ github.event.pull_request && github.event.action == 'closed' }}
148+
if: ${{ github.event.pull_request && !github.event.pull_request.head.repo.fork && github.event.action == 'closed' }}
142149
env:
143150
PR_NUM: ${{ github.event.number }}
144151
uses: mshick/add-pr-comment@v1

cmake/FindDpctl.cmake

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,8 @@
1717
#
1818

1919
if(NOT Dpctl_FOUND)
20-
set(_find_extra_args)
21-
if(Dpctl_FIND_REQUIRED)
22-
list(APPEND _find_extra_args REQUIRED)
23-
endif()
24-
if(Dpctl_FIND_QUIET)
25-
list(APPEND _find_extra_args QUIET)
26-
endif()
27-
find_package(PythonInterp ${_find_extra_args})
28-
find_package(PythonLibs ${_find_extra_args})
20+
find_package(Python 3.9 REQUIRED
21+
COMPONENTS Interpreter Development.Module)
2922

3023
if(PYTHON_EXECUTABLE)
3124
execute_process(COMMAND "${PYTHON_EXECUTABLE}"

conda-recipe/run_test.bat

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
"%PYTHON%" -c "import dpctl; print(dpctl.__version__)"
44
if errorlevel 1 exit 1
55

6-
"%PYTHON%" -c "import dpctl; dpctl.lsplatform()"
6+
"%PYTHON%" -m dpctl -f
77
if errorlevel 1 exit 1
88

9-
python -m pytest -q -p no:faulthandler -ra --disable-warnings --pyargs dpctl -vv
9+
python -m pytest -q -ra --disable-warnings --pyargs dpctl -vv
1010
if errorlevel 1 exit 1

conda-recipe/run_test.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33
set -e
44

55
${PYTHON} -c "import dpctl; print(dpctl.__version__)"
6-
${PYTHON} -c "import dpctl; dpctl.lsplatform(verbosity=2)"
7-
${PYTHON} -m pytest -q -ra --disable-warnings -p no:faulthandler --cov dpctl --cov-report term-missing --pyargs dpctl -vv
6+
${PYTHON} -m dpctl -f
7+
${PYTHON} -m pytest -q -ra --disable-warnings --cov dpctl --cov-report term-missing --pyargs dpctl -vv

dpctl/_sycl_context.pyx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ cdef class SyclContext(_SyclContext):
114114
ctx = dpctl.SyclContext()
115115
print(ctx.get_devices())
116116
117-
- Invoking the constuctor with a specific filter string that creates a
117+
- Invoking the constructor with a specific filter string that creates a
118118
context for the device corresponding to the filter string.
119119
120120
:Example:
@@ -127,7 +127,7 @@ cdef class SyclContext(_SyclContext):
127127
d = ctx.get_devices()[0]
128128
assert(d.is_gpu)
129129
130-
- Invoking the constuctor with a :class:`dpctl.SyclDevice` object
130+
- Invoking the constructor with a :class:`dpctl.SyclDevice` object
131131
creates a context for that device.
132132
133133
:Example:
@@ -141,7 +141,7 @@ cdef class SyclContext(_SyclContext):
141141
d = ctx.get_devices()[0]
142142
assert(d.is_gpu)
143143
144-
- Invoking the constuctor with a list of :class:`dpctl.SyclDevice`
144+
- Invoking the constructor with a list of :class:`dpctl.SyclDevice`
145145
objects creates a common context for all the devices. This
146146
constructor call is especially useful when creation a context for
147147
multiple sub-devices.
@@ -159,7 +159,7 @@ cdef class SyclContext(_SyclContext):
159159
ctx = dpctl.SyclContext(sub_devices)
160160
assert(len(ctx.get_devices) == len(sub_devices))
161161
162-
- Invoking the constuctor with a named ``PyCapsule`` with name
162+
- Invoking the constructor with a named ``PyCapsule`` with name
163163
**"SyclContextRef"** that carries a pointer to a ``sycl::context``
164164
object. The capsule will be renamed upon successful consumption
165165
to ensure one-time use. A new named capsule can be constructed by
@@ -430,7 +430,7 @@ cdef class SyclContext(_SyclContext):
430430
return num_devs
431431
else:
432432
raise ValueError(
433-
"An error was encountered quering the number of devices "
433+
"An error was encountered querying the number of devices "
434434
"associated with this context"
435435
)
436436

dpctl/_sycl_device.pyx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1163,7 +1163,7 @@ cdef class SyclDevice(_SyclDevice):
11631163
def create_sub_devices(self, **kwargs):
11641164
"""create_sub_devices(partition=parition_spec)
11651165
Creates a list of sub-devices by partitioning a root device based on the
1166-
provided partion specifier.
1166+
provided partition specifier.
11671167
11681168
A partition specifier must be provided using a "partition"
11691169
keyword argument. Possible values for the specifier are: an int, a

dpctl/_sycl_event.pyx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ cdef class SyclEvent(_SyclEvent):
119119
# Create a default SyclEvent
120120
e = dpctl.SyclEvent()
121121
122-
- Invoking the constuctor with a named ``PyCapsule`` with name
122+
- Invoking the constructor with a named ``PyCapsule`` with name
123123
**"SyclEventRef"** that carries a pointer to a ``sycl::event``
124124
object. The capsule will be renamed upon successful consumption
125125
to ensure one-time use. A new named capsule can be constructed by

dpctl/_sycl_queue.pyx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ cdef class SyclQueue(_SyclQueue):
246246
# create a queue for each sub-device using the common context
247247
queues = [dpctl.SyclQueue(ctx, sub_d) for sub_d in sub_devices]
248248
249-
- Invoking the constuctor with a named ``PyCapsule`` with the name
249+
- Invoking the constructor with a named ``PyCapsule`` with the name
250250
**"SyclQueueRef"** that carries a pointer to a ``sycl::queue``
251251
object. The capsule will be renamed upon successful consumption
252252
to ensure one-time use. A new named capsule can be constructed by

dpctl/_sycl_timer.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,14 @@ class SyclTimer:
3737
q = dpctl.SyclQueue(property='enable_profiling')
3838
3939
# create the timer
40-
miliseconds_sc = 1e-3
41-
timer = dpctl.SyclTimer(time_scale = miliseconds_sc)
40+
milliseconds_sc = 1e-3
41+
timer = dpctl.SyclTimer(time_scale = milliseconds_sc)
4242
4343
# use the timer
4444
with timer(queue=q):
4545
code_block
4646
47-
# retrieve elapsed times in miliseconds
47+
# retrieve elapsed times in milliseconds
4848
sycl_dt, wall_dt = timer.dt
4949
5050
Remark:

dpctl/apis/include/dpctl4pybind11.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -742,12 +742,12 @@ class usm_memory : public py::object
742742
return nullptr;
743743
}
744744

745-
auto convertor =
745+
auto converter =
746746
::dpctl::detail::dpctl_capi::get().as_usm_memory_pyobj();
747747

748748
py::object res;
749749
try {
750-
res = convertor(py::handle(o));
750+
res = converter(py::handle(o));
751751
} catch (const py::error_already_set &e) {
752752
return nullptr;
753753
}

dpctl/memory/_memory.pyx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ cdef void copy_via_host(void *dest_ptr, SyclQueue dest_queue,
9292
void *src_ptr, SyclQueue src_queue, size_t nbytes):
9393
"""
9494
Copies `nbytes` bytes from `src_ptr` USM memory to
95-
`dest_ptr` USM memory using host as the intemediary.
95+
`dest_ptr` USM memory using host as the intermediary.
9696
9797
This is useful when `src_ptr` and `dest_ptr` are bound to incompatible
9898
SYCL contexts.

dpctl/tensor/_copy_utils.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def _copy_to_numpy(ary):
5656

5757
def _copy_from_numpy(np_ary, usm_type="device", sycl_queue=None):
5858
"Copies numpy array `np_ary` into a new usm_ndarray"
59-
# This may peform a copy to meet stated requirements
59+
# This may perform a copy to meet stated requirements
6060
Xnp = np.require(np_ary, requirements=["A", "E"])
6161
alloc_q = normalize_queue_device(sycl_queue=sycl_queue, device=None)
6262
dt = Xnp.dtype
@@ -517,6 +517,11 @@ def copy(usm_ary, order="K"):
517517
- "K": match the layout of `usm_ary` as closely as possible.
518518
519519
"""
520+
if len(order) == 0 or order[0] not in "KkAaCcFf":
521+
raise ValueError(
522+
"Unrecognized order keyword value, expecting 'K', 'A', 'F', or 'C'."
523+
)
524+
order = order[0].upper()
520525
if not isinstance(usm_ary, dpt.usm_ndarray):
521526
return TypeError(
522527
f"Expected object of type dpt.usm_ndarray, got {type(usm_ary)}"
@@ -585,11 +590,11 @@ def astype(usm_ary, newdtype, order="K", casting="unsafe", copy=True):
585590
return TypeError(
586591
f"Expected object of type dpt.usm_ndarray, got {type(usm_ary)}"
587592
)
588-
if not isinstance(order, str) or order not in ["A", "C", "F", "K"]:
593+
if len(order) == 0 or order[0] not in "KkAaCcFf":
589594
raise ValueError(
590-
"Unrecognized value of the order keyword. "
591-
"Recognized values are 'A', 'C', 'F', or 'K'"
595+
"Unrecognized order keyword value, expecting 'K', 'A', 'F', or 'C'."
592596
)
597+
order = order[0].upper()
593598
ary_dtype = usm_ary.dtype
594599
target_dtype = _get_dtype(newdtype, usm_ary.sycl_queue)
595600
if not dpt.can_cast(ary_dtype, target_dtype, casting=casting):

dpctl/tensor/_device.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ def sycl_context(self):
9696
@property
9797
def sycl_device(self):
9898
"""
99-
:class:`dpctl.SyclDevice` targed by this :class:`.Device`.
99+
:class:`dpctl.SyclDevice` targeted by this :class:`.Device`.
100100
"""
101101
return self.sycl_queue_.sycl_device
102102

dpctl/tensor/_elementwise_funcs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1628,7 +1628,7 @@
16281628
_subtract_docstring_ = """
16291629
subtract(x1, x2, out=None, order='K')
16301630
1631-
Calculates the difference bewteen each element `x1_i` of the input
1631+
Calculates the difference between each element `x1_i` of the input
16321632
array `x1` and the respective element `x2_i` of the input array `x2`.
16331633
16341634
Args:

dpctl/tensor/_manipulation_functions.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ def broadcast_to(X, shape):
316316
raise TypeError(f"Expected usm_ndarray type, got {type(X)}.")
317317

318318
# Use numpy.broadcast_to to check the validity of the input
319-
# parametr 'shape'. Raise ValueError if 'X' is not compatible
319+
# parameter 'shape'. Raise ValueError if 'X' is not compatible
320320
# with 'shape' according to NumPy's broadcasting rules.
321321
new_array = np.broadcast_to(
322322
np.broadcast_to(np.empty(tuple(), dtype="u1"), X.shape), shape
@@ -747,7 +747,7 @@ def iinfo(dtype):
747747
748748
Returns:
749749
iinfo_object:
750-
An object with the followign attributes
750+
An object with the following attributes
751751
* bits: int
752752
number of bits occupied by the data type
753753
* max: int

dpctl/tensor/_print.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ def set_print_options(
148148
suppress (bool, optional): If `True,` numbers equal to zero
149149
in the current precision will print as zero.
150150
Default: `False`.
151-
nanstr (str, optional): String used to repesent nan.
151+
nanstr (str, optional): String used to represent nan.
152152
Raises `TypeError` if nanstr is not a string.
153153
Default: `"nan"`.
154154
infstr (str, optional): String used to represent infinity.

dpctl/tensor/_slicing.pxi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ def _basic_slice_meta(ind, shape : tuple, strides : tuple, offset : int):
104104
Give basic slicing index `ind` and array layout information produce
105105
a 5-tuple (resulting_shape, resulting_strides, resulting_offset,
106106
advanced_ind, resulting_advanced_ind_pos)
107-
used to contruct a view into underlying array over which advanced
107+
used to construct a view into underlying array over which advanced
108108
indexing, if any, is to be performed.
109109
110110
Raises IndexError for invalid index `ind`.
@@ -201,7 +201,7 @@ def _basic_slice_meta(ind, shape : tuple, strides : tuple, offset : int):
201201
raise TypeError
202202
if ellipses_count > 1:
203203
raise IndexError(
204-
"an index can only have a sinlge ellipsis ('...')")
204+
"an index can only have a single ellipsis ('...')")
205205
if axes_referenced > len(shape):
206206
raise IndexError(
207207
"too many indices for an array, array is "

dpctl/tensor/_stride_utils.pxi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ cdef int _from_input_shape_strides(
5555
nelems - Number of elements in array
5656
min_disp = min( dot(strides, index), index for shape)
5757
max_disp = max( dor(strides, index), index for shape)
58-
contig = enumation for array contiguity
58+
contig = enumeration for array contiguity
5959
Returns: 0 on success, error code otherwise.
6060
On success pointers point to allocated arrays,
6161
Otherwise they are set to NULL

0 commit comments

Comments
 (0)