-
Notifications
You must be signed in to change notification settings - Fork 26
Move compute follows data utils #2840
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
vlad-perevezentsev
merged 373 commits into
include-dpctl-tensor
from
move_compute_follows_data_utils
Apr 10, 2026
Merged
Changes from all commits
Commits
Show all changes
373 commits
Select commit
Hold shift + click to select a range
88a23a2
Move _searchsorted_left/right to _tensor_sorting_impl
vlad-perevezentsev 148b6e5
Fix bug: wrong shape pointer for positions array
vlad-perevezentsev 8b010b0
Move ti.searchsorted() and reuse it in dpnp
vlad-perevezentsev 9766d34
Move dpt.unique_all() and dpt.unique_inverse() and reuse it in dpnp
vlad-perevezentsev b8ad5ec
Move _isin to _tensor_sorting_impl
vlad-perevezentsev ce570a5
Fix bug: wrong shape pointer for dst array
vlad-perevezentsev a7c6440
Move dpt.isin() and reuse it in dpnp
vlad-perevezentsev 62d19f1
Move _topk to _tensor_sorting_impl
vlad-perevezentsev 56d397d
Move dpt.top_k()
vlad-perevezentsev ad814fb
Initialize _tensor_reductions_impl extension and move _all
vlad-perevezentsev c4f2496
Add TODO with incorrect logic in reductions_over_axis.hpp
vlad-perevezentsev bd3add0
Move ti.all() to dpctl_ext.tensor and reuse it in dpnp
vlad-perevezentsev b1953df
Move _any to _tensor_reductions_impl
vlad-perevezentsev 32802d6
Move ti.any()/ti.diff() and reuse them in dpnp
vlad-perevezentsev 1b4e498
Move _min_over_axis/_max_over_axis to _tensor_reductions_impl
vlad-perevezentsev aa313ff
Move ti.min()/max() and reuse it in dpnp
vlad-perevezentsev c6d600a
Move _argmax/argmin_over_axis to _tensor_reductions_impl
vlad-perevezentsev 8ae933d
Move ti.argmax()/argmin() to dpctl_ext.tensor and reuse them in dpnp
vlad-perevezentsev 2ec3cc7
Move _prod/sum_over_axis to _tensor_reductions_impl
vlad-perevezentsev 6b27b1b
Move ti.sum()/prod() to dpctl_ext.tensor and reuse them in dpnp
vlad-perevezentsev 3041d7d
Move _logsumexp/hypot_over_axis to _tensor_reductions_impl
vlad-perevezentsev 4872bb6
Move ti.count_nonzero()/logsumexp()/reduce_hypot() to dpctl_ext.tenso…
vlad-perevezentsev 58fdef3
Initialize _tensor_elementwise_impl extension and move _abs
vlad-perevezentsev d4cda7c
Move ti.abs() and reuse _abs in dpnp
vlad-perevezentsev ec74213
Move _acos/_acosh to _tensor_elementwise_impl
vlad-perevezentsev d4293a2
Move ti.acos()/acosh() and reuse them in dpnp
vlad-perevezentsev a548dbb
Move _angle/_asin/_asinh to _tensor_elementwise_impl
vlad-perevezentsev 0cec8c3
Move ti.angel()/asin()/asinh() and reuse them
vlad-perevezentsev 4e10a53
Move _atan/_atanh to _tensor_elementwise_impl
vlad-perevezentsev d509f6d
Move ti.atan()/atanh() and reuse them
vlad-perevezentsev e54114f
Move __bitwise_invert/_ceil/_conj to _tensor_elementwise_impl
vlad-perevezentsev e24b129
Move ti.bitwise_invert()/ceil()/conj() and reust them
vlad-perevezentsev a6100b8
Move _cos/_cosh to _tensor_elementwise_impl
vlad-perevezentsev e6d0d6f
Move ti.cos()/cosh() and reuse them
vlad-perevezentsev 44ac844
Move _exp/_expmp/_floor to dpctl_ext.tensor and reuse them
vlad-perevezentsev eab5fec
Move ti.imag()/isfinite()/isfinite() and reuse them
vlad-perevezentsev 4a8c05d
Move ti.isnan()/log()/log1p() and reuse them
vlad-perevezentsev 6d9221c
Move ti.log2()/log10() and reuse them
vlad-perevezentsev 7f444bd
Move ti.logical_not()/negative()/positive() and reuse them
vlad-perevezentsev dbf021a
Move ti.proj()/real()/round() and reuse them
vlad-perevezentsev 0bc8973
Move ti.sign()/signbit()/sin()/sinh() and reuse them
vlad-perevezentsev a1707b2
Move ti.square()/sqrt()/tan()/tanh() and reuse them
vlad-perevezentsev 0cdc3e4
Move ti.cbrt()/exp2()/reciprocal()/rsqrt()/trunc() and reuse them
vlad-perevezentsev 3333fc1
add tensor linalg extension
ndgrigorian bdf3b18
Move helper logic for binary functions
vlad-perevezentsev d8aab36
Move ti.add() and reuse them
vlad-perevezentsev a51d34f
Move ti.atan2()/bitwise_and() and reuse them
vlad-perevezentsev ccb4c67
Move all binary bitwise functions and reuse them
vlad-perevezentsev fe7778d
Move ti.equal()/floor_divide()/divide() and reuse them
vlad-perevezentsev c73df9c
Move ti.greater()/greater_equal()/hypot() and reuse them
vlad-perevezentsev fefaa17
Move ti.less()/less_equal() and reuse them
vlad-perevezentsev 28288ae
Move ti.logaddexp() and reuse it
vlad-perevezentsev 1fb889d
Move all binary logical_ functions and reuse them
vlad-perevezentsev 87f5529
Move ti.maximum()/minimum()/multiply() and reuse them
vlad-perevezentsev 2d5d2ea
Move ti.nextafter()/not_equal()/pow() and reuse them
vlad-perevezentsev cab0b36
Move ti.copysign()/remainder()/subtract() and reuse them
vlad-perevezentsev ada8a5c
Merge include-dpctl-tensor into move_tensor_accumulation_impl
vlad-perevezentsev 85ef3e0
Apply remarks
vlad-perevezentsev 99c75cb
Use function from dpctl_ext.tensor in tensor python files
vlad-perevezentsev 8dbf689
Move statistical functions to dpctl_ext.tensor and reuse them
vlad-perevezentsev e574a9a
Use _tensor_elementwise_impl from dpctl_ext
vlad-perevezentsev 5a897c8
Add where to __init__
vlad-perevezentsev ecbc6a3
Move ti.allclose() to dpctl_ext.tensor
vlad-perevezentsev 6e40f22
Merge move_tensor_accumulation_impl into move_tensor_sorting_impl
vlad-perevezentsev c9644ac
Merge move_tensor_sorting_impl into move_tensor_reductions_impl_ext
vlad-perevezentsev 6a2c31b
Merge move_tensor_reductions_impl_ext into move_tensor_elementwise_im…
vlad-perevezentsev 9339cb8
Merge move_tensor_elementwise_impl_unary into move_tensor_elementwise…
vlad-perevezentsev a506fe9
Merge move_tensor_elementwise_impl_unary_par_2 into move_tensor_eleme…
vlad-perevezentsev fc34f30
Merge move_tensor_elementwise_impl_unary_par_3 into move-tensor-linalg
vlad-perevezentsev c9efd4d
Merge move-tensor-linalg into move_elementwise_binary_impl
vlad-perevezentsev ee6ba17
Add missing logaddexp to __init__.py
vlad-perevezentsev d80285e
Merge move_elementwise_binary_impl into move_elementwise_binary_impl_…
vlad-perevezentsev c3d5ad7
Merge move_elementwise_binary_impl_part_2 into move_elementwise_binar…
vlad-perevezentsev a59ccd1
Merge move_elementwise_binary_impl_part_3 into finalize_functional_mi…
vlad-perevezentsev 3bd1b0e
fix includes and namespaces in dot.cpp
ndgrigorian 1620f77
use dpctl_ext.tensor throughout _linear_algebra_functions
ndgrigorian cb03a49
Move data types to dpctl_ext.tensor
vlad-perevezentsev 93510c0
Move class Device to dpctl_ext.tensor
vlad-perevezentsev 8e11b23
Move constants to dpctl_ext.tensor
vlad-perevezentsev 54fe331
Move array API utilities
vlad-perevezentsev 60bba8f
Move print functions to dpctl_ext.tensor
vlad-perevezentsev b4fa023
Move include/dlpack to dpctl_ext.tensor
vlad-perevezentsev fb8b77e
Move _dlpack.pyx/pxd to dpctl_ext.tensor
vlad-perevezentsev 5c9e183
Move _flags.pyx to dpctl_ext.tensor
vlad-perevezentsev 8f44c37
Move cython helper files
vlad-perevezentsev e2441eb
Move dldevice_conversions functions
vlad-perevezentsev 422e87e
Move usm_ndarray to dpctl_ext.tensor
vlad-perevezentsev 75580a5
fix clang-format
ndgrigorian e114808
Fix import _flags and _dlpack in _usmarray.pyx
vlad-perevezentsev 39c0571
Update CMakes files to build usm_ndarray
vlad-perevezentsev 7e6a283
abbreviate namespaces in linalg module sources and headers
ndgrigorian 3c428a6
Switch fully to dpctl_ext.tensor in dpctl_ext.tensor
vlad-perevezentsev 3883a1c
Switch fully to dpctl_ext.tensor in dpnp
vlad-perevezentsev 23164ac
Reorder _usmarray import in __init__.py
vlad-perevezentsev 18c3d61
Add missing _place_impl() to _copy_utils.py
vlad-perevezentsev 7f14dfc
Update _dlpack.pyx to use dpctl_ext.tensor
vlad-perevezentsev 5e7123d
Update _usmarray.pyx to use dpctl_ext.tensor
vlad-perevezentsev f4da0de
Integrate dpctl_ext.tensor C-API to dpnp4pybind11.hpp
vlad-perevezentsev 1e4902d
Add from_dlpack to API dpctl_ext.tensor
vlad-perevezentsev 9a50f9f
Extend .gitignore for dpctl_ext/include
vlad-perevezentsev 153a91b
Add DpctlExtCAPI interface target
vlad-perevezentsev 95acc3d
Increase build time for public CI
vlad-perevezentsev f55507d
Update test_from_dlpack_with_dpt to use dpt.empty
vlad-perevezentsev 5d11ff7
Merge include-dpctl-tensor into move_tensor_elementwise_impl_unary
vlad-perevezentsev 281adbf
Apply remarks
vlad-perevezentsev 7b63ab5
Merge move_tensor_elementwise_impl_unary into move_tensor_elementwise…
vlad-perevezentsev a2d28af
Clean-up includes
vlad-perevezentsev 1403be4
Merge move_tensor_elementwise_impl_unary_par_2 into move_tensor_eleme…
vlad-perevezentsev 0182c74
Clean-up includes
vlad-perevezentsev 86878cf
Merge move_tensor_elementwise_impl_unary_par_3 into move-tensor-linalg
vlad-perevezentsev c0ff29f
Add the missing includes for dot.cpp
vlad-perevezentsev ca295f1
Merge move-tensor-linalg into move_elementwise_binary_impl
vlad-perevezentsev e6e179e
Clean-up includes
vlad-perevezentsev ed289fc
Merge move_elementwise_binary_impl into move_elementwise_binary_impl_…
vlad-perevezentsev a3b2d00
Clean-up includes
vlad-perevezentsev d4ca39b
Merge move_elementwise_binary_impl_part_2 into move_elementwise_binar…
vlad-perevezentsev b467db5
Clean-up includes
vlad-perevezentsev 608802a
Clean-up includes
vlad-perevezentsev b614202
Merge move_elementwise_binary_impl_part_2 into move_elementwise_binar…
vlad-perevezentsev f4c05d2
Merge move_elementwise_binary_impl_part_3 into finalize_functional_mi…
vlad-perevezentsev 9a7fae9
Merge finalize_functional_migration into move_usm_ndarray
vlad-perevezentsev 85c4906
Initialize dpnp/tests/tensor and migrate test_tensor_* files
vlad-perevezentsev 244dd6a
Migrate test_usm_ndarray_* to dpnp/tests/tensor
vlad-perevezentsev b61078f
Fix test_boolean_reductions_nan_inf to assert array instead of scalar
vlad-perevezentsev fd62a26
Migrate elementwise tests to dpnp/tests/tensor/elementwise
vlad-perevezentsev e2e633e
Fix incorrect expected dtype in test_complex_usm_type
vlad-perevezentsev a06936d
Fix incorrect expected dtype in test_hyper_complex_contig
vlad-perevezentsev 935e4e6
Fix incorrect expected dtype in test_log1p_special_cases
vlad-perevezentsev 6f5a792
Fix round() output dtype for boolean input to match numpy
vlad-perevezentsev 42cb05b
Fix incorrect expected dtype in test_trig_complex_contig
vlad-perevezentsev bf41dc6
Include tensor folder tests in package distribution
vlad-perevezentsev 1a56ad0
Move dpnp/tests/tensor into dpctl_ext/tests
vlad-perevezentsev fad5749
Update imports in tensor tests and add conftest.py
vlad-perevezentsev bd015a5
Update package_data for tensor tests in setup.py
vlad-perevezentsev 7c6afd2
Include dpctl_ext tensor tests in public CI pipeline
vlad-perevezentsev bbda500
Extend package_data with dpctl_ext/tests/*.py
vlad-perevezentsev 7ccc050
Increase build timeout-minutes public CI
vlad-perevezentsev 5c96686
Increase coverage build timeout to 90 minutes
vlad-perevezentsev 3ba741a
Add public C-API header for dpctl_ext
vlad-perevezentsev 946ce93
Move dpctl C-API imports to dpctl_ext_capi.h
vlad-perevezentsev da0995c
Remove the workaround via CMAKE_BINARY_DIR from DpctlExtCAPI
vlad-perevezentsev 31685d4
Disable pylint check no-name-in-module in dpnp_iface_statistics.py
vlad-perevezentsev fddedde
Merge include-dpctl-tensor into move_elementwise_binary_impl_part_2
vlad-perevezentsev 969ec9a
Add a missing include
vlad-perevezentsev b0a4a6e
Apply remarks
vlad-perevezentsev 21f1aec
Merge move_elementwise_binary_impl_part_2 into move_elementwise_binar…
vlad-perevezentsev 255a20b
Merge include-dpctl-tensor into move_elementwise_binary_impl_part_3
vlad-perevezentsev d00ebe4
Clean up includes
vlad-perevezentsev 1a4f450
Merge move_elementwise_binary_impl_part_3 into finalize_functional_mi…
vlad-perevezentsev ed51252
Merge finalize_functional_migration into move_usm_ndarray
vlad-perevezentsev b4395ea
Increase timeout_minutes for build dpnp with coverage step
vlad-perevezentsev 7327502
Increase timeout-minutes for Build and Deploy Docs
vlad-perevezentsev 252f385
Merge move_usm_ndarray into move_tensor_tests
vlad-perevezentsev 42a6ada
Merge include-dpctl-tensor into finalize_functional_migration
vlad-perevezentsev 7294993
Enable dpctl_ext tests in conda test scripts
vlad-perevezentsev bc52234
Update test_from_dlpack_with_dpt to use empty from dpctl_ext
vlad-perevezentsev 8adaa68
Fully switch to using dpctl_ext functions for dpnp_elementwise_common.py
vlad-perevezentsev 0277672
Update _testing.py in dpctl_ext/tensor
vlad-perevezentsev 11562a2
Merge finalize_functional_migration into move_usm_ndarray
vlad-perevezentsev fd763f3
Merge include-dpctl-tensor into move_usm_ndarray
vlad-perevezentsev b30e6cc
Apply remarks
vlad-perevezentsev ec030b2
Move dpctl_ext/tensor into dpnp/tensor w/o updates
vlad-perevezentsev 118410d
Register dpnp.tensor in setup.py
vlad-perevezentsev c6c0d18
Update imports in dpnp.tensor files and remove TODO
vlad-perevezentsev 005635c
Update imports in dpnp files and remove TODO
vlad-perevezentsev efc9957
Move include/dpctl_ext_capi.h and rename to dpnp_tensor_capi.h
vlad-perevezentsev 38227d1
Update dpnp4pybind11.hpp
vlad-perevezentsev 3911d28
Update CMake configuration for dpnp.tensor
vlad-perevezentsev 81a031d
Remove dpctl_ext folder
vlad-perevezentsev 862a800
Rename DpctlExtCAPI to DpnpTensorCAPI
vlad-perevezentsev 3e591f7
Update CMake files
vlad-perevezentsev 7bf9492
Update .gitignore
vlad-perevezentsev 7c90dc7
Test: reduce memory usage in coverage build
vlad-perevezentsev d0a08e0
Remove dpctl_ext.tensor C-API logic
vlad-perevezentsev 09d9c46
Fix dpnp build dependencies after C-API removal
vlad-perevezentsev a9aadd9
Remove the warning suppress
vlad-perevezentsev 996ecfb
Merge move_usm_ndarray into remove_c_api_tensor
vlad-perevezentsev 6ea695a
Increase timeout-minutes for generate-coverage job
vlad-perevezentsev 3dd6429
Merge move_usm_ndarray into move_dpctl_ext_to_dpnp_tensor
vlad-perevezentsev d41bfc0
Test: increase timeout_minutes and CMAKE_BUILD_PARALLEL_LEVEL
vlad-perevezentsev eeb1d49
Test: increase timeout_minutes and swap memory
vlad-perevezentsev 76b1a0f
Undo accidentally removed import DLDeviceType
vlad-perevezentsev fd8c438
Test: CMAKE_BUILD_PARALLEL_LEVEL to 1 and timeout_minutes 350
vlad-perevezentsev fe3b2db
Update dlpack.h to v1.3 and README.md
vlad-perevezentsev 9087bbf
Update examples in dpctl_ext.tensor cython files
vlad-perevezentsev aa934f7
Add TODO comment in __init__.py
vlad-perevezentsev 33fc8fc
Apply remark
vlad-perevezentsev 03efb63
Skip tensor build for coverage
vlad-perevezentsev 5b7600c
Revert coverage test changes
vlad-perevezentsev 72a18a1
Merge branch 'move_usm_ndarray' into move_dpctl_ext_to_dpnp_tensor
vlad-perevezentsev e841145
Merge include-dpctl-tensor into remove_c_api_tensor
vlad-perevezentsev 7173375
Move CMAKE_BINARY_DIR to SYSTEM includes and remove duplicates
vlad-perevezentsev 9ed637e
Remove the remaining dpctl_ext imports
vlad-perevezentsev 9939b55
Merge include-dpctl-tensor into move_dpctl_ext_to_dpnp_tensor
vlad-perevezentsev fbb3706
Merge branch 'remove_c_api_tensor' into move_dpctl_ext_to_dpnp_tensor
vlad-perevezentsev 3b2cb40
Update cython docstrings
vlad-perevezentsev 51670fa
Merge branch 'remove_c_api_tensor' into move_dpctl_ext_to_dpnp_tensor
vlad-perevezentsev ad50437
Remove dpctl_ext folder
vlad-perevezentsev b261373
Remove dpctl_ext_capi.h that appeared after the merge
vlad-perevezentsev 9f7b5ad
Merge branch 'remove_c_api_tensor' into move_dpctl_ext_to_dpnp_tensor
vlad-perevezentsev b95873e
Remove dpnp_tensor_capi.h
vlad-perevezentsev b263cbd
Remove installation of dpnp C-API headers
vlad-perevezentsev 1fefc4e
Update comment in dpnp4pybind11.hpp
vlad-perevezentsev 52f1f77
Split coverage build into separate steps
vlad-perevezentsev 0d74e4d
Add SYCL_CACHE_PERSISTENT: 1 for GH coverage build
vlad-perevezentsev d819ae3
Test: swap space and use CMAKE_BUILD_PARALLEL_LEVEL: 2
vlad-perevezentsev 609e1ab
Test : remove swap
vlad-perevezentsev e023f2f
Test: use -fsycl-device-code-split=off for tensor coverage build
vlad-perevezentsev 6f8f4a2
Make _usmarray dependencies conditional in backend extensions
vlad-perevezentsev a29a169
Use dpnp.tensor.usm_ndarray in get_array() check
vlad-perevezentsev af8e355
Use -fsycl-device-code-split=per_source in tensor coverage
vlad-perevezentsev 2f9e5d9
Use per_source device code splitting for coverage build
vlad-perevezentsev 6fc1439
Test: add Run coverage tests as a separate step
vlad-perevezentsev 56ac18a
Merge include-dpctl-tensor into move_dpctl_ext_to_dpnp_tensor
vlad-perevezentsev bf0c6b1
Remove per_source device code splitting and separate run test step
vlad-perevezentsev 1992b6f
Optimize tensor coverage build to match dpctl
vlad-perevezentsev 331fd49
Simplify coverage build to single step
vlad-perevezentsev 27df7d9
Merge include-dpctl-tensor into move_tensor_tests
vlad-perevezentsev 0ba14f5
Remove _usmarray dependencies conditional
vlad-perevezentsev be72615
Merge move_dpctl_ext_to_dpnp_tensor into move_tensor_tests
vlad-perevezentsev 1bca6b2
Move dpctl_ext/tests into dpnp/tests
vlad-perevezentsev 75d82dd
Update tensor tests: use dpnp.tensor import
vlad-perevezentsev 257dea8
Remove capi tests
vlad-perevezentsev 2ac6361
Update tensor test configuration in public CI
vlad-perevezentsev a0785bb
Apply remarks
vlad-perevezentsev 779440e
Apply remarks with coverage
vlad-perevezentsev 39d054e
Merge move_dpctl_ext_to_dpnp_tensor into move_tensor_tests
vlad-perevezentsev e1a18a5
Merge include-dpctl-tensor into move_tensor_tests
vlad-perevezentsev c3390af
Move _compute_follows_data.pyx into dpnp.tensor
vlad-perevezentsev d002967
Update dpnp files by replacing dpctl.utils import
vlad-perevezentsev 9636c28
Update dpnp.tensor files by replacing dpctl.utils import
vlad-perevezentsev 01b92b8
Update dpnp.tests.tensor files by replacing dpctl.utils import
vlad-perevezentsev 06cce1b
Update dpnp.tests files by replacing dpctl.utils import
vlad-perevezentsev 8e84608
Align dpnp.tensor CMake flags with dpctl.tensor
vlad-perevezentsev 25e121f
Increase timeout-minutes for OneMath workflows
vlad-perevezentsev a5a5e64
Test: split running tests in conda-recipe
vlad-perevezentsev eea1dc1
use --deselect instead of not working --ignore
vlad-perevezentsev 19178ad
Fix a circular import in _usmarray.py
vlad-perevezentsev 9b125c3
Test: add SKIP_TENSOR_TESTS env variable and apply it
vlad-perevezentsev e11366e
Remove separate test runs in conda-recipe
vlad-perevezentsev 8cc35f1
Reset print options in test_print_dpnp_1d
vlad-perevezentsev 4ffd5b5
Apply w/a to custom_inclusive_scan_over_group from dpctl #2275
vlad-perevezentsev bc35610
Test: test_print_dpnp_1d on CPU
vlad-perevezentsev 2897e05
Skip test_print_dpnp_1d with TODO
vlad-perevezentsev ca48a49
Merge move_tensor_tests into move_compute_follows_data_utils
vlad-perevezentsev 30705f8
Apply remark
vlad-perevezentsev f9d6f55
Link jira ticket to skip reason
vlad-perevezentsev 8ed2fa3
Merge move_tensor_tests into move_compute_follows_data_utils
vlad-perevezentsev a0d2c2a
Merge include-dpctl-tensor into move_compute_follows_data_utils
vlad-perevezentsev 61a7248
Apply remarks
vlad-perevezentsev File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.