input: from typing import List
  
  def rotate_vector_3d(vector: Vector3D, axis: Vector3D, angle: float) -> Vector3D:
      """ Rotate a 3D vector around a given axis by a specified angle.
      The axis vector must be a unit vector (i.e., its magnitude must be 1).
      The angle is in radians.
      >>> rotate_vector_3d(Vector3D(1, 0, 0), Vector3D(0, 1, 0), 1.5708)
      Vector3D(0.0, 0.0, -1.0)
      >>> rotate_vector_3d(Vector3D(0, 1, 0), Vector3D(1, 0, 0), 3.1416)
      Vector3D(0.0, -1.0, 0.0)
      """
output:     cos_angle = math.cos(angle)
      sin_angle = math.sin(angle)
      one_minus_cos = 1 - cos_angle
  
      x, y, z = vector.x, vector.y, vector.z
      u, v, w = axis.x, axis.y, axis.z
  
      new_x = (u * u * one_minus_cos + cos_angle) * x + \
              (u * v * one_minus_cos - w * sin_angle) * y + \
              (u * w * one_minus_cos + v * sin_angle) * z
  
      new_y = (v * u * one_minus_cos + w * sin_angle) * x + \
              (v * v * one_minus_cos + cos_angle) * y + \
              (v * w * one_minus_cos - u * sin_angle) * z
  
      new_z = (w * u * one_minus_cos - v * sin_angle) * x + \
              (w * v * one_minus_cos + u * sin_angle) * y + \
              (w * w * one_minus_cos + cos_angle) * z
  
      return Vector3D(new_x, new_y, new_z)