code: def test_inheritance(msg):
      from pybind11_tests import (
          Pet,
          Dog,
          Rabbit,
          Hamster,
          dog_bark,
          pet_name_species,
      )
  
      roger = Rabbit("Rabbit")
      assert (
          roger.name() + " is a " + roger.species()
          == "Rabbit is a parrot"
      )
      assert pet_name_species(roger) == "Rabbit is a parrot"
  
      polly = Pet("Polly", "parrot")
      assert (
          polly.name() + " is a " + polly.species()
          == "Polly is a parrot"
      )
      assert pet_name_species(polly) == "Polly is a parrot"
  
      molly = Dog("Molly")
      assert (
          molly.name() + " is a " + molly.species() == "Molly is a dog"
      )
      assert pet_name_species(molly) == "Molly is a dog"
  
      fred = Hamster("Fred")
      assert (
          fred.name() + " is a " + fred.species() == "Fred is a rodent"
      )
  
      assert dog_bark(molly) == "Woof!"
  
      with pytest.raises(TypeError) as excinfo:
          dog_bark(polly)
      assert (
          msg(excinfo.value)
          == """
          dog_bark(): incompatible function arguments. The following argument types are supported:
              1. (arg0: m.Dog) -> str
  
          Invoked with: <m.Pet object at 0>
      """
      )
  
imports: import pytest
label_desc: Use image node_id 1 for calling a global function with example usage: test_inheritance(msg) without return types