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

feat: Infer the type for attributes from the assigned value with mypy #34

Closed
Masara opened this issue Nov 13, 2023 · 8 comments
Closed
Assignees
Labels
enhancement 💡 New feature or request

Comments

@Masara
Copy link
Contributor

Masara commented Nov 13, 2023

Is your feature request related to a problem?

Attributes, parameters and results in stubs, which are generated from python code, currently have no type information if the python code did not have type hints. Example:

# Python Code
class A:
    attr1: int
    attr2 = 2

    def my_func(a = 1):
        return a
// Safe-DS stubs
class A() {
    attr1: Int
    attr2

    fun myFunc(a = 1) -> result1: Any
}    

Furthermore, currently, if a function has no return type specified, the API will generate "Any" as the return type. This value has to be removed and the type has to be either inferred with mypy or left empty.

Desired solution

The API Class has to be adjusted to also infer type information with mypy if no type hints are given.
Then the following should be done:

  1. Try to infer the type from the assigned value if mypy offers this functionality.
// Safe-DS stubs
class A() {
    attr1: Int
    attr2: Int

    fun myFunc(a: Int = 1) -> result1: Int
}    
  1. If this is not possible (in general or for a specific case) add a TODO.
// Safe-DS stubs
class A() {
    attr1: Int
    // TODO Attribute has no type information.
    attr2

    // TODO Parameter has no type information.
    // TODO Result has no type information.
    fun myFunc(a) -> result1
}    
@Masara Masara added the enhancement 💡 New feature or request label Nov 13, 2023
@Masara
Copy link
Contributor Author

Masara commented Nov 13, 2023

@lars-reimann Do we also want to infer parameter and result types?

@lars-reimann
Copy link
Member

Yes to both. Later we can compare this with the information in the documentation.

@Masara Masara self-assigned this Nov 17, 2023
Masara added a commit that referenced this issue Nov 20, 2023
Masara added a commit that referenced this issue Nov 20, 2023
Masara added a commit that referenced this issue Nov 20, 2023
Masara added a commit that referenced this issue Nov 20, 2023
Masara added a commit that referenced this issue Nov 20, 2023
@Masara
Copy link
Contributor Author

Masara commented Nov 20, 2023

@lars-reimann

  1. For parameter default values and type hint, what kind of values do we support in Safe-DS? You once told me that we only support float, int, bool, str and None. Should I therefore ignore other types?
  2. Mypy can't infer default values of attributes in init methods. Should I add "Type hint missing ..." todo messages none the less?

@lars-reimann
Copy link
Member

lars-reimann commented Nov 20, 2023

  1. For parameter default values and type hint, what kind of values do we support in Safe-DS? You once told me that we only support float, int, bool, str and None. Should I therefore ignore other types?

Default values can be any expression. Types can be any core class or any type for which you created stubs (i.e. a type defined in the library you create stubs for).

  1. Mypy can't infer default values of attributes in init methods. Should I add "Type hint missing ..." todo messages none the less?

Yes, and leave the type empty.

@Masara
Copy link
Contributor Author

Masara commented Nov 24, 2023

@lars-reimann If we have a function like this:

def func(self):
    if ...:
        return 42
    elif ...:
        return False
    else:
        return 1.2, "some string"

how would the result information for the stubs look like?

@Masara
Copy link
Contributor Author

Masara commented Nov 24, 2023

@lars-reimann Would it be

fun func() -> (result1: union<Int, Boolean, Float>, result2: String?)

?

@lars-reimann
Copy link
Member

For result1, we could set the type to:

  • Any (common supertype of the possible types in the union)
  • union<Int, Boolean, Float>
  • literal<42, false, 1.2> (the exact possible values)

For now, I don't have a clear preference towards either option. Do whatever is easiest with mypy.

@Masara
Copy link
Contributor Author

Masara commented Nov 27, 2023

This issue is finished. This is a summary of some things, that Mypy could not handle:

  1. Mypy can't infer default values of attributes in init methods.
  2. Mypy can't infer the default value if its a call expression like some_attr = SomeClass()

@Masara Masara closed this as completed Nov 27, 2023
lars-reimann pushed a commit that referenced this issue Jun 1, 2024
Bumps [mkdocs-glightbox](https://github.com/Blueswen/mkdocs-glightbox)
from 0.3.7 to 0.4.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/Blueswen/mkdocs-glightbox/releases">mkdocs-glightbox's
releases</a>.</em></p>
<blockquote>
<h2>mkdocs-glightbox-0.4.0</h2>
<ul>
<li>Supported manual mode (<a
href="https://redirect.github.com/Blueswen/mkdocs-glightbox/issues/29">#29</a>)</li>
<li>Allow calling lightbox methods from other places (<a
href="https://redirect.github.com/Blueswen/mkdocs-glightbox/issues/34">#34</a>)</li>
<li>Added id to appended script tag (<a
href="https://redirect.github.com/Blueswen/mkdocs-glightbox/issues/38">#38</a>)</li>
<li>Access theme attribute directly (<a
href="https://redirect.github.com/Blueswen/mkdocs-glightbox/issues/40">#40</a>)</li>
<li>Better JavaScript Error Handling (<a
href="https://redirect.github.com/Blueswen/mkdocs-glightbox/issues/36">#36</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/blueswen/mkdocs-glightbox/blob/main/CHANGELOG">mkdocs-glightbox's
changelog</a>.</em></p>
<blockquote>
<p>mkdocs-glightbox-0.4.0 (2023-05-06)</p>
<pre><code>* Supported manual mode
([#29](blueswen/mkdocs-glightbox#29))
* Allow calling lightbox methods from other places
([#34](blueswen/mkdocs-glightbox#34))
* Added id to appended script tag
([#38](blueswen/mkdocs-glightbox#38))
* Access theme attribute directly
([#40](blueswen/mkdocs-glightbox#40))
* Better JavaScript Error Handling
([#36](blueswen/mkdocs-glightbox#36))
</code></pre>
<p>mkdocs-glightbox-0.3.7 (2023-01-24)</p>
<pre><code>* Supported custom background and shadow
([#27](blueswen/mkdocs-glightbox#27))
</code></pre>
<p>mkdocs-glightbox-0.3.6 (2023-12-30)</p>
<pre><code>* Modified width default to auto prevent zooming large image
bug ([#21](blueswen/mkdocs-glightbox#21))
* Supported only enable glightbox with on-glb class in given page
([#28](blueswen/mkdocs-glightbox#28))
</code></pre>
<p>mkdocs-glightbox-0.3.5 (2023-11-18)</p>
<pre><code>* Supported compatibility with the privacy plugin of Material
for MkDocs insiders
([#25](blueswen/mkdocs-glightbox#25))
</code></pre>
<p>mkdocs-glightbox-0.3.4 (2023-04-25)</p>
<pre><code>* Fixed regex bug: quote issue and empty alt issue
([#14](blueswen/mkdocs-glightbox#14)
[#19](blueswen/mkdocs-glightbox#19))
</code></pre>
<p>mkdocs-glightbox-0.3.3 (2023-04-20)</p>
<pre><code>* Refactored processing logic with regex
([#14](blueswen/mkdocs-glightbox#14))
</code></pre>
<p>mkdocs-glightbox-0.3.2 (2023-03-19)</p>
<pre><code>* Supported image without extension
([#13](blueswen/mkdocs-glightbox#13))
</code></pre>
<p>mkdocs-glightbox-0.3.1 (2022-11-22)</p>
<pre><code>* Supported lightbox slide effect customization
([#8](blueswen/mkdocs-glightbox#8))
* Supported synchronized lightbox caption dark mode with Material for
MkDocs ([#7](blueswen/mkdocs-glightbox#7))
* Supported glightbox built-in gallery feature
([#11](blueswen/mkdocs-glightbox#11))
* Supported skip image in the anchor tag
</code></pre>
<p>mkdocs-glightbox-0.3.0 (2022-09-29)</p>
<pre><code>* Fixed width and height setting in config not working bug
* Supported specific skip class
([#5](blueswen/mkdocs-glightbox#5))
* Supported glightbox built-in caption with title and description
([#4](blueswen/mkdocs-glightbox#4))
* Fixed page jitter when lightbox closing issue using Material for
MkDocs
* Add white background for lightbox images to prevent the displaying
issue of the transparent image on black background
</code></pre>
<p>mkdocs-glightbox-0.2.1 (2022-08-10)</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/blueswen/mkdocs-glightbox/commit/7f68f19556c8d91eb45bed2f5e3b93f9d0b4e591"><code>7f68f19</code></a>
v0.4.0</li>
<li><a
href="https://github.com/blueswen/mkdocs-glightbox/commit/1409b0de89bd0aa930bbee0c2aa801c8b3391137"><code>1409b0d</code></a>
Add manual mode</li>
<li><a
href="https://github.com/blueswen/mkdocs-glightbox/commit/e5ce7c9214f2de3647cbb1c9a1ec67bd82b387f9"><code>e5ce7c9</code></a>
Add search plugin note</li>
<li><a
href="https://github.com/blueswen/mkdocs-glightbox/commit/d7747e7e1e58e8fe5868f38292bbb6a65f5ac902"><code>d7747e7</code></a>
Merge pull request <a
href="https://redirect.github.com/Blueswen/mkdocs-glightbox/issues/29">#29</a>
from michalfapso/main</li>
<li><a
href="https://github.com/blueswen/mkdocs-glightbox/commit/6895d4eb60ef383530f8a807bec19404342a74c3"><code>6895d4e</code></a>
Add test case</li>
<li><a
href="https://github.com/blueswen/mkdocs-glightbox/commit/dc38a6c042da9dcf949a594940f312cfbf5cc1ae"><code>dc38a6c</code></a>
try catch prevent Uncaught TypeError (<a
href="https://redirect.github.com/Blueswen/mkdocs-glightbox/issues/36">#36</a>)</li>
<li><a
href="https://github.com/blueswen/mkdocs-glightbox/commit/7d2c0ab4b214759f7ab22ab9e775c609718ad061"><code>7d2c0ab</code></a>
access theme attribute directly (<a
href="https://redirect.github.com/Blueswen/mkdocs-glightbox/issues/40">#40</a>)</li>
<li><a
href="https://github.com/blueswen/mkdocs-glightbox/commit/b0b63f8fa2bfbd14812c95b466af180e34db2cc4"><code>b0b63f8</code></a>
Merge pull request <a
href="https://redirect.github.com/Blueswen/mkdocs-glightbox/issues/34">#34</a>
from AndBondStyle/main</li>
<li><a
href="https://github.com/blueswen/mkdocs-glightbox/commit/8e652652429851d18a0c920ca1ddcbf12ab71fdf"><code>8e65265</code></a>
update validation condition</li>
<li><a
href="https://github.com/blueswen/mkdocs-glightbox/commit/4963fdb93c4f483827bcab10c5289452068e1fb5"><code>4963fdb</code></a>
Merge branch 'main' into main</li>
<li>Additional commits viewable in <a
href="https://github.com/Blueswen/mkdocs-glightbox/compare/v0.3.7...v0.4.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=mkdocs-glightbox&package-manager=pip&previous-version=0.3.7&new-version=0.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement 💡 New feature or request
Projects
Status: ✔️ Done
Development

No branches or pull requests

2 participants