I would do something like this:
from arcpy.sa import *
input_raster = 'path/to/raster'
red = Float(Raster(input_raster + r"\Band_3"))
nir = Float(Raster(input_raster + r"\Band_4"))
ndvi = (nir - red) / (nir + red)
You could also use GenerateRasterFromRasterFunction_management, but that seems to take much the same processing ...
If you follow exact steps from ESRI, it works and will produce something like that:
I don't like that they are disconnected. Perhaps create sub-catchments from stream network and assume that divides between them ARE ridges:
Note smaller flow accumulation threshold you'll use to derive streams will result in more detailed ridges network.
Consider erasing ...