Python-Numba-AufrufproblemePython

Python-Programme
Anonymous
 Python-Numba-Aufrufprobleme

Post by Anonymous »

Ich habe Code für die Simulation der Fluiddynamik einer Wasserschicht geschrieben. Es hat eine Funktion von solid_liquid_layer_angular_velocity_change:

Code: Select all

def solid_liquid_layer_angular_velocity_change(
viscosity,
radius,
thickness,
solid_inertia,
solid_angular_velocity,
liquid_layer_angular_velocity,
second_liquid_layer_angular_velocity,
):
"""
Calculate the angular velocity change rates for both solid and liquid layers due to viscous interaction.

Formula:
t = 8/3 * mu * r^4 * (omega_solid - omega_liquid) / thickness
dOmega_solid/dt = -t / I_effective

Args:
viscosity: The dynamic viscosity of the liquid
radius: The radius of the top layer of the fluid
thickness: The thickness of one liquid layer
solid_inertia: The principal moments of inertia of the solid object [I1, I2, I3]
solid_angular_velocity: The current angular velocity of the solid object [ωx, ωy, ωz]
liquid_layer_angular_velocity: The angular velocity of the top liquid layer
second_liquid_layer_angular_velocity: The angular velocity of the second liquid layer

Returns:
tuple: (solid_angular_velocity_change, liquid_angular_velocity_change)
"""
# Small value to avoid division by zero
EPSILON = 1e-10

# Calculate torque on solid due to liquid with numerical stability
delta_omega = solid_angular_velocity - liquid_layer_angular_velocity
torque_magnitude = (8/3) * np.pi * viscosity * (radius**4) / max(thickness, EPSILON)
torque_solid = torque_magnitude * delta_omega

# Calculate liquid layer's angular velocity change with numerical stability
current_radius = max(radius - thickness, EPSILON)
total_layers = max(radius / max(thickness, EPSILON), 1.0)

# Initialize with zeros
liquid_angular_velocity_change = np.zeros_like(liquid_layer_angular_velocity)

# Only calculate if we have enough layers
if total_layers > 1:
liquid_angular_velocity_change = layer_angular_velocity_change(
kinetic_viscosity=water_kinetic_viscosity,
radius=current_radius,
layer=current_radius/thickness,
total_layers=total_layers,
upper_angular_velocity=solid_angular_velocity,
angular_velocity=liquid_layer_angular_velocity,
lower_angular_velocity=second_liquid_layer_angular_velocity
)

# Calculate effective inertia with numerical stability
effective_inertia = inertia_of_solid_object_at_nonmain_axis_rotation(
solid_inertia,
solid_angular_velocity
)

# Calculate solid's angular velocity change due to liquid with numerical stability
solid_angular_velocity_change_due_to_liquid = np.zeros_like(torque_solid)
if effective_inertia >  EPSILON:
solid_angular_velocity_change_due_to_liquid = -torque_solid / effective_inertia

# Ensure we don't return NaN or inf
solid_angular_velocity_change_due_to_liquid = np.nan_to_num(
solid_angular_velocity_change_due_to_liquid,
nan=0.0,
posinf=0.0,
neginf=0.0
)

return solid_angular_velocity_change_due_to_liquid, liquid_angular_velocity_change
und dann habe ich es in einem anderen Code zum Aufrufen verwendet:

Code: Select all

upper_layer_viscous_increment_term, solid_angular_velocity_viscous_increment_term = solid_liquid_layer_angular_velocity_change(
viscosity=water_viscosity,
radius=water_radius,
thickness=layer_thickness,
solid_inertia=inertia_tensor,
solid_angular_velocity=solid_angular_velocity_current,
liquid_layer_angular_velocity=water_angular_velocity_current[water_layer_num-1],
second_liquid_layer_angular_velocity=water_angular_velocity_current[water_layer_num-2],
)
Dann habe ich eine Fehlermeldung erhalten, die von numba verursacht wurde und behauptet, dass die aufgerufenen Parameter nicht mit der definierten Funktion übereinstimmen, was dazu führt, dass der Index außerhalb des gültigen Bereichs liegt:

Code: Select all

/usr/local/bin/python3.13 /Users/niuyingkai/PycharmProjects/PT-formula/2026 prob 7 liquid solid interaction.py
Traceback (most recent call last):
File "/Users/niuyingkai/PycharmProjects/PT-formula/2026 prob 7 liquid solid interaction.py", line 174, in 
upper_layer_viscous_increment_term, solid_angular_velocity_viscous_increment_term = solid_liquid_layer_angular_velocity_change(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
viscosity=water_viscosity,
^^^^^^^^^^^^^^^^^^^^^^^^^^
......
second_liquid_layer_angular_velocity=water_angular_velocity_current[water_layer_num-2],
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 443, in _compile_for_args
raise e
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 376, in _compile_for_args
return_val = self.compile(tuple(argtypes))
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 908, in compile
cres = self._compiler.compile(args, return_type)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 80, in compile
status, retval = self._compile_cached(args, return_type)
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 94, in _compile_cached
retval = self._compile_core(args, return_type)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 107, in _compile_core
cres = compiler.compile_extra(self.targetdescr.typing_context,
self.targetdescr.target_context,
......
flags=flags, locals=self.locals,
pipeline_class=self.pipeline_class)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler.py", line 739, in compile_extra
return pipeline.compile_extra(func)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler.py", line 439, in compile_extra
return self._compile_bytecode()
~~~~~~~~~~~~~~~~~~~~~~^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler.py", line 505, in _compile_bytecode
return self._compile_core()
~~~~~~~~~~~~~~~~~~^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler.py", line 481, in _compile_core
raise e
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler.py", line 473, in _compile_core
pm.run(self.state)
~~~~~~^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler_machinery.py", line 363,  in run
raise e
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler_machinery.py", line 356, in run
self._runPass(idx, pass_inst, state)
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler_lock.py", line 35, in _acquire_compile_lock
return func(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler_machinery.py", line 311, in _runPass
mutated |= check(pss.run_pass, internal_state)
~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler_machinery.py", line 272, in check
mangled = func(compiler_state)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typed_passes.py", line 114, in run_pass
typemap, return_type, calltypes, errs = type_inference_stage(
~~~~~~~~~~~~~~~~~~~~^
state.typingctx,
^^^^^^^^^^^^^^^^
......
state.locals,
^^^^^^^^^^^^^
raise_errors=self._raise_errors)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typed_passes.py", line 95, in type_inference_stage
errs = infer.propagate(raise_errors=raise_errors)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typeinfer.py", line 1075, in propagate
errors = self.constraints.propagate(self)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typeinfer.py", line 160, in propagate
constraint(typeinfer)
~~~~~~~~~~^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typeinfer.py", line 572, in __call__
self.resolve(typeinfer, typevars, fnty)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typeinfer.py", line 595, in resolve
sig = typeinfer.resolve_call(fnty, pos_args, kw_args)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typeinfer.py", line 1569, in resolve_call
return self.context.resolve_function_type(fnty, pos_args, kw_args)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typing/context.py", line 279, in resolve_function_type
res = self._resolve_user_function_type(func, args, kws)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typing/context.py", line 335, in _resolve_user_function_type
return func.get_call_type(self, args, kws)
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/types/functions.py", line 541, in get_call_type
self.dispatcher.get_call_template(args, kws)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 315, in get_call_template
pysig, args = self._compiler.fold_argument_types(args, kws)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 73, in fold_argument_types
args = fold_arguments(self.pysig, args, kws,
normal_handler,
default_handler,
stararg_handler)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-fpackages/numba/core/typing/templates.py", line 217, in fold_arguments
bind_kws[n] = args[len(kwonly) + idx]
~~~~^^^^^^^^^^^^^^^^^^^
IndexError: tuple index out of range

Process finished with exit code 1
Aber ich habe den Anruf überprüft und es gab überhaupt kein Problem.
Was ist das Problem? Wie kann man es lösen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post
  • Python-Numba-Aufrufprobleme
    by Anonymous » » in Python
    0 Replies
    0 Views
    Last post by Anonymous
  • Python-Numba-Aufrufprobleme
    by Anonymous » » in Python
    0 Replies
    0 Views
    Last post by Anonymous
  • Python Numba spielt nicht wie erwartet
    by Anonymous » » in Python
    0 Replies
    21 Views
    Last post by Anonymous
  • Cython Groupby -Funktion viel langsamer als eine ähnliche Numba -Funktion
    by Guest » » in Python
    0 Replies
    33 Views
    Last post by Guest
  • Wie kann ich eine Methode zum Ausführen auf einer GPU mit Numba kompilieren?
    by Anonymous » » in Python
    0 Replies
    37 Views
    Last post by Anonymous