python / python/mypy

[mypyc] TypeError: bool object expected; got numpy.bool_

Aperta
#14,405 3 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug topic-mypyc
Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

When I run mypy check, everything seems to be ok. If I compile the code using mypyc and execute the compiled code,
at runtime , I get the error " TypeError: bool object expected; got numpy.bool_" when executing the compute_2 function. Note that compute_1 and compute_2 are almost the same. The code is given below:


from __future__ import annotations
import numpy as np
import time
import numpy.typing as npt

class Book:
    def __init__(self)->None:
        self.x: float = 0.1
        self.y: float = 0.2
        self.z: float = 0.3
        self.x_d: float = 0.15
        self.y_d: float = 0.25
        self.z_d: float = 0.35
        self.price: float = 6.5
        self.new_price: np.float64 = np.float64(0.4)
        self.can_sell: bool = True
        self.history: npt.NDArray[np.float64] = np.array([1.2, 1.1, 1.4], dtype=np.float64)


    def compare(self)->None:
        if self.can_sell and self.price > self.new_price:
            print('This is ok: bool and np.bool_ comparison')
   
    def assign(self)->None:
        self.x_d = self.history[0]
  

    def compute_1(self)->None:
        x_d = self.x_d
        y_d = self.y_d
        z_d = self.z_d
        
        err = ((x_d - self.x) ** 2 + (y_d - self.y) ** 2 + (z_d - self.z) ** 2) ** 0.5 

        if err < self.price:
            print("This is also ok")


    def compute_2(self)->None:
        x_d = self.x_d
        y_d = self.y_d
        z_d = self.z_d
        
        err = ((x_d - self.x) ** 2 + (y_d - self.y) ** 2 + (z_d - self.z) ** 2) 
        err = err ** 0.5

        if err < self.price:
            print("This is not ok")

def main()->None:
    b = Book()
    b.compare()
    b.assign()
    b.compute_1()
    b.compute_2()

if __name__ == '__main__':
    main()

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia con il riproduttore Python fornito, in particolare con i metodi Book.assign, compute_1 e compute_2, ed eseguilo tramite mypyc per riprodurre il diverso comportamento a runtime. Confronta la gestione generata delle due espressioni equivalenti e aggiungi un test di regressione se è possibile identificare la posizione del test pertinente. Il lavoro è completato quando il riproduttore compilato non solleva più il numpy.bool_ TypeError.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
numpy, python
Ambito
compilers, tooling
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
32/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.