I have a random seed set at the start of my run for reproducibility. But there are a few sub-functions (e.g. rando) that also use random numbers. If I used a different random number seed just for those, it affects the random seed outside of the function. Is it possible to set the random seed and use it only locally inside the function and the random state outside the function does not get affected? I believe I can always get the random state, save it and restore it. Would there be an easier option? I showed an example below.
import numpy as np

def rando():
    np.random.seed(420)
    np.random.randint(1, 100)
    np.random.randint(1, 100)
    return None


np.random.seed(69)
for n in range(3):
    np.random.randint(1,100) # outputs : 55,76,74
for n in range(3):
    np.random.randint(1,100) # outputs : 91,56,21

Is it possible to make the function below also output the same thing?
np.random.seed(69)
for n in range(3):
    np.random.randint(1,100) # outputs : 55,76,74
rando()
for n in range(3):
    np.random.randint(1,100) # would like it to output : 91,56,21


Python Local random seed
That's why there are numpy random generators and that is why they recommend using that. Just define one generator for each instance, e.g.:
def rando(rng):
    print('function')
    print(rng.integers(1, 100))
    print(rng.integers(1, 100))
    print('end of function')
    return None



rng1 = np.random.default_rng(69)
rng2 = np.random.default_rng(420)

for n in range(3):
    print(rng1.integers(1, 100)) # outputs : 6,58,67
rando(rng2) # outputs 62, 77
for n in range(3):
    print(rng1.integers(1, 100)) # would like it to output : 53,78,86

yielding:
6
58
67
function
62
77
end of function
53
78
86

and when you comment out the function call, you get:
6
58
67
53
78
86

