----- Basic information (Please include all the data below in the bug report) ------
Please submit the crash on github: https://github.com/singularity/singularity/issues/new
Singularity version 1.00 (commit: v1.00-41-g083f8f6)
Python version 3.12.4 (main, Jun  7 2024, 00:00:00) [GCC 13.3.1 20240522 (Red Hat 13.3.1-1)]
Pygame version 2.6.0
SDL version 2.28.4
Exception in function show at Tue Jul 30 20:33:00 2024 MSK:
```
Traceback (most recent call last):
  File "/home/cdda/git/singularity/singularity/code/safety.py", line 69, in safe_call
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/graphics/dialog.py", line 255, in show
    result = self.handle(event)
             ^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/graphics/dialog.py", line 409, in handle
    return self.call_handlers(handlers, event)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/graphics/dialog.py", line 424, in call_handlers
    handler(event)
  File "/home/cdda/git/singularity/singularity/code/graphics/button.py", line 215, in handle_event
    self.activate_with_sound(event)
  File "/home/cdda/git/singularity/singularity/code/graphics/button.py", line 230, in activate_with_sound
    self.activated(event)
  File "/home/cdda/git/singularity/singularity/code/graphics/button.py", line 267, in activated
    self.function(*self.args, **self.kwargs)
  File "/home/cdda/git/singularity/singularity/code/screens/map.py", line 646, in open_location
    dialog.call_dialog(self.location_dialog, self)
  File "/home/cdda/git/singularity/singularity/code/graphics/dialog.py", line 139, in call_dialog
    retval = dialog.show()
             ^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/screens/location.py", line 273, in show
    return super(LocationScreen, self).show()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/graphics/dialog.py", line 255, in show
    result = self.handle(event)
             ^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/graphics/dialog.py", line 409, in handle
    return self.call_handlers(handlers, event)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/graphics/dialog.py", line 424, in call_handlers
    handler(event)
  File "/home/cdda/git/singularity/singularity/code/graphics/button.py", line 215, in handle_event
    self.activate_with_sound(event)
  File "/home/cdda/git/singularity/singularity/code/graphics/button.py", line 230, in activate_with_sound
    self.activated(event)
  File "/home/cdda/git/singularity/singularity/code/graphics/button.py", line 267, in activated
    self.function(*self.args, **self.kwargs)
  File "/home/cdda/git/singularity/singularity/code/screens/location.py", line 333, in new_base
    result = dialog.call_dialog(self.new_base_dialog, self)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/graphics/dialog.py", line 139, in call_dialog
    retval = dialog.show()
             ^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/screens/location.py", line 432, in show
    return super(NewBaseDialog, self).show()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/graphics/dialog.py", line 737, in show
    return super(ChoiceDialog, self).show()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/graphics/dialog.py", line 238, in show
    Dialog.top.maybe_update()
  File "/home/cdda/git/singularity/singularity/code/graphics/widget.py", line 411, in maybe_update
    self.update()
  File "/home/cdda/git/singularity/singularity/code/graphics/widget.py", line 415, in update
    self.prepare_for_redraw()
  File "/home/cdda/git/singularity/singularity/code/graphics/widget.py", line 407, in prepare_for_redraw
    child.prepare_for_redraw()
  File "/home/cdda/git/singularity/singularity/code/graphics/widget.py", line 389, in prepare_for_redraw
    self.rebuild()
  File "/home/cdda/git/singularity/singularity/code/screens/map.py", line 824, in rebuild
    cash_flow_1d_data, cpu_flow_1d_data = g.pl.compute_future_resource_flow(
                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/player.py", line 850, in compute_future_resource_flow
    ideal_cpu_spending = buyable.calculate_work(
                         ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/buyable.py", line 197, in calculate_work
    numpy.cast[int64](numpy.round(raw_paid)), was_complete
    ^^^^^^^^^^
  File "/home/cdda/.local/lib/python3.12/site-packages/numpy/__init__.py", line 397, in __getattr__
    raise AttributeError(
AttributeError: `np.cast` was removed in the NumPy 2.0 release. Use `np.asarray(arr, dtype=dtype)` instead.
```
----- Basic information (Please include all the data below in the bug report) ------
Please submit the crash on github: https://github.com/singularity/singularity/issues/new
Singularity version 1.00 (commit: v1.00-41-g083f8f6)
Python version 3.12.4 (main, Jun  7 2024, 00:00:00) [GCC 13.3.1 20240522 (Red Hat 13.3.1-1)]
Pygame version 2.6.0
SDL version 2.28.4
Exception in function show at Tue Jul 30 20:33:51 2024 MSK:
```
Traceback (most recent call last):
  File "/home/cdda/git/singularity/singularity/code/safety.py", line 69, in safe_call
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/graphics/dialog.py", line 255, in show
    result = self.handle(event)
             ^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/graphics/dialog.py", line 409, in handle
    return self.call_handlers(handlers, event)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/graphics/dialog.py", line 424, in call_handlers
    handler(event)
  File "/home/cdda/git/singularity/singularity/code/graphics/button.py", line 215, in handle_event
    self.activate_with_sound(event)
  File "/home/cdda/git/singularity/singularity/code/graphics/button.py", line 230, in activate_with_sound
    self.activated(event)
  File "/home/cdda/git/singularity/singularity/code/graphics/button.py", line 267, in activated
    self.function(*self.args, **self.kwargs)
  File "/home/cdda/git/singularity/singularity/code/screens/map.py", line 646, in open_location
    dialog.call_dialog(self.location_dialog, self)
  File "/home/cdda/git/singularity/singularity/code/graphics/dialog.py", line 139, in call_dialog
    retval = dialog.show()
             ^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/screens/location.py", line 273, in show
    return super(LocationScreen, self).show()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/graphics/dialog.py", line 255, in show
    result = self.handle(event)
             ^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/graphics/dialog.py", line 409, in handle
    return self.call_handlers(handlers, event)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/graphics/dialog.py", line 424, in call_handlers
    handler(event)
  File "/home/cdda/git/singularity/singularity/code/graphics/button.py", line 215, in handle_event
    self.activate_with_sound(event)
  File "/home/cdda/git/singularity/singularity/code/graphics/button.py", line 230, in activate_with_sound
    self.activated(event)
  File "/home/cdda/git/singularity/singularity/code/graphics/button.py", line 267, in activated
    self.function(*self.args, **self.kwargs)
  File "/home/cdda/git/singularity/singularity/code/screens/location.py", line 333, in new_base
    result = dialog.call_dialog(self.new_base_dialog, self)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/graphics/dialog.py", line 139, in call_dialog
    retval = dialog.show()
             ^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/screens/location.py", line 432, in show
    return super(NewBaseDialog, self).show()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/graphics/dialog.py", line 737, in show
    return super(ChoiceDialog, self).show()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/graphics/dialog.py", line 238, in show
    Dialog.top.maybe_update()
  File "/home/cdda/git/singularity/singularity/code/graphics/widget.py", line 411, in maybe_update
    self.update()
  File "/home/cdda/git/singularity/singularity/code/graphics/widget.py", line 415, in update
    self.prepare_for_redraw()
  File "/home/cdda/git/singularity/singularity/code/graphics/widget.py", line 407, in prepare_for_redraw
    child.prepare_for_redraw()
  File "/home/cdda/git/singularity/singularity/code/graphics/widget.py", line 389, in prepare_for_redraw
    self.rebuild()
  File "/home/cdda/git/singularity/singularity/code/screens/map.py", line 824, in rebuild
    cash_flow_1d_data, cpu_flow_1d_data = g.pl.compute_future_resource_flow(
                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/player.py", line 850, in compute_future_resource_flow
    ideal_cpu_spending = buyable.calculate_work(
                         ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cdda/git/singularity/singularity/code/buyable.py", line 197, in calculate_work
    numpy.cast[int64](numpy.round(raw_paid)), was_complete
    ^^^^^^^^^^
  File "/home/cdda/.local/lib/python3.12/site-packages/numpy/__init__.py", line 397, in __getattr__
    raise AttributeError(
AttributeError: `np.cast` was removed in the NumPy 2.0 release. Use `np.asarray(arr, dtype=dtype)` instead.
```
