Skip to content
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

Replace relative imports by absolute ones in structure #36573

Merged
merged 2 commits into from
Nov 5, 2023

Conversation

tobiasdiez
Copy link
Contributor

@tobiasdiez tobiasdiez commented Oct 29, 2023

Relative imports are not used consistently in the codebase and result in issues for doctesting with pytest (which admittedly is a limitation of pytest). We normalize the relative imports in sage.structure to be absolute imports.

📝 Checklist

  • The title is concise, informative, and self-explanatory.
  • The description explains in detail what this PR is about.
  • I have linked a relevant issue or discussion.
  • I have created tests covering the changes.
  • I have updated the documentation accordingly.

⌛ Dependencies

@github-actions
Copy link

Documentation preview for this PR (built with commit 460d967; changes) is ready! 🎉

@tobiasdiez tobiasdiez marked this pull request as ready for review October 29, 2023 23:31
@tobiasdiez tobiasdiez requested review from dcoudert, fchapoton, tornaria and mkoeppe and removed request for dcoudert October 29, 2023 23:31
@tornaria
Copy link
Contributor

Awesome: this should fix the fact that cythonize out of tree code that needs to use cimports from sage is currently broken (cython 3.0.4):

$ cat test.pyx 
from sage.structure.element cimport *
$ cythonize test.pyx
$ cythonize test.pyx 
Compiling /tmp/test.pyx because it changed.
[1/1] Cythonizing /tmp/test.pyx
/usr/lib/python3.12/site-packages/Cython/Compiler/Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: /tmp/test.pyx
  tree = Parsing.p_module(s, pxd, full_module_name)

Error compiling Cython file:
------------------------------------------------------------
...
from .sage_object cimport SageObject
^
------------------------------------------------------------

/usr/lib/python3.12/site-packages/sage/structure/element.pxd:1:0: 'sage/structure/sage_object.pxd' not found

Error compiling Cython file:
------------------------------------------------------------
...
from .sage_object cimport SageObject
^
------------------------------------------------------------

/usr/lib/python3.12/site-packages/sage/structure/element.pxd:1:0: 'sage/structure/sage_object/SageObject.pxd' not found

Error compiling Cython file:
------------------------------------------------------------
...
from .sage_object cimport SageObject
from .parent cimport Parent
^
------------------------------------------------------------

/usr/lib/python3.12/site-packages/sage/structure/element.pxd:2:0: 'sage/structure/parent.pxd' not found

Error compiling Cython file:
------------------------------------------------------------
...
from .sage_object cimport SageObject
from .parent cimport Parent
^
------------------------------------------------------------

/usr/lib/python3.12/site-packages/sage/structure/element.pxd:2:0: 'sage/structure/parent/Parent.pxd' not found

Error compiling Cython file:
------------------------------------------------------------
...

cdef unary_op_exception(op, x)
cdef bin_op_exception(op, x, y)


cdef class Element(SageObject):
                   ^
------------------------------------------------------------

/usr/lib/python3.12/site-packages/sage/structure/element.pxd:150:19: First base of 'Element' is not an extension type

Error compiling Cython file:
------------------------------------------------------------
...
cdef unary_op_exception(op, x)
cdef bin_op_exception(op, x, y)


cdef class Element(SageObject):
    cdef Parent _parent
         ^
------------------------------------------------------------

/usr/lib/python3.12/site-packages/sage/structure/element.pxd:151:9: 'Parent' is not a type identifier
Traceback (most recent call last):
  File "/usr/bin/cythonize", line 33, in <module>
    sys.exit(load_entry_point('Cython==3.0.4', 'console_scripts', 'cythonize')())
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/Cython/Build/Cythonize.py", line 251, in main
    _cython_compile_files(all_paths, options)
  File "/usr/lib/python3.12/site-packages/Cython/Build/Cythonize.py", line 67, in _cython_compile_files
    ext_modules = cythonize(
                  ^^^^^^^^^^
  File "/usr/lib/python3.12/site-packages/Cython/Build/Dependencies.py", line 1154, in cythonize
    cythonize_one(*args)
  File "/usr/lib/python3.12/site-packages/Cython/Build/Dependencies.py", line 1321, in cythonize_one
    raise CompileError(None, pyx_file)
Cython.Compiler.Errors.CompileError: /tmp/test.pyx

I think changing the relative imports to absolute ones makes this work.

@tornaria
Copy link
Contributor

LGTM, the issue I mentioned is so annoying that I'm actually rebuilt my system sagemath with this. All test long passed. It fixes the issue of out of tree compilation, so I'll raise the priority.

@tobiasdiez
Copy link
Contributor Author

tobiasdiez commented Oct 31, 2023

Happy that this even resolved some other issues. Thanks for the quick review. Matthias and I have opened a few other PRs doing similar replacements.

vbraun pushed a commit to vbraun/sage that referenced this pull request Nov 1, 2023
    
<!-- ^^^^^
Please provide a concise, informative and self-explanatory title.
Don't put issue numbers in there, do this in the PR body below.
For example, instead of "Fixes sagemath#1234" use "Introduce new method to
calculate 1+1"
-->
<!-- Describe your changes here in detail -->

Relative imports are not used consistently in the codebase and result in
issues for doctesting with pytest (which admittedly is a limitation of
pytest). We normalize the relative imports in `sage.structure` to be
absolute imports.

<!-- Why is this change required? What problem does it solve? -->
<!-- If this PR resolves an open issue, please link to it here. For
example "Fixes sagemath#12345". -->
<!-- If your change requires a documentation PR, please link it
appropriately. -->

### 📝 Checklist

<!-- Put an `x` in all the boxes that apply. -->
<!-- If your change requires a documentation PR, please link it
appropriately -->
<!-- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->
<!-- Feel free to remove irrelevant items. -->

- [x] The title is concise, informative, and self-explanatory.
- [x] The description explains in detail what this PR is about.
- [ ] I have linked a relevant issue or discussion.
- [ ] I have created tests covering the changes.
- [ ] I have updated the documentation accordingly.

### ⌛ Dependencies

<!-- List all open PRs that this PR logically depends on
- sagemath#12345: short description why this is a dependency
- sagemath#34567: ...
-->

<!-- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->
    
URL: sagemath#36573
Reported by: Tobias Diez
Reviewer(s):
vbraun pushed a commit to vbraun/sage that referenced this pull request Nov 2, 2023
    
<!-- ^^^^^
Please provide a concise, informative and self-explanatory title.
Don't put issue numbers in there, do this in the PR body below.
For example, instead of "Fixes sagemath#1234" use "Introduce new method to
calculate 1+1"
-->
<!-- Describe your changes here in detail -->

Relative imports are not used consistently in the codebase and result in
issues for doctesting with pytest (which admittedly is a limitation of
pytest). We normalize the relative imports in `sage.structure` to be
absolute imports.

<!-- Why is this change required? What problem does it solve? -->
<!-- If this PR resolves an open issue, please link to it here. For
example "Fixes sagemath#12345". -->
<!-- If your change requires a documentation PR, please link it
appropriately. -->

### 📝 Checklist

<!-- Put an `x` in all the boxes that apply. -->
<!-- If your change requires a documentation PR, please link it
appropriately -->
<!-- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->
<!-- Feel free to remove irrelevant items. -->

- [x] The title is concise, informative, and self-explanatory.
- [x] The description explains in detail what this PR is about.
- [ ] I have linked a relevant issue or discussion.
- [ ] I have created tests covering the changes.
- [ ] I have updated the documentation accordingly.

### ⌛ Dependencies

<!-- List all open PRs that this PR logically depends on
- sagemath#12345: short description why this is a dependency
- sagemath#34567: ...
-->

<!-- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->
    
URL: sagemath#36573
Reported by: Tobias Diez
Reviewer(s):
@vbraun vbraun merged commit d48a809 into sagemath:develop Nov 5, 2023
29 of 30 checks passed
@mkoeppe mkoeppe added this to the sage-10.2 milestone Nov 5, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants