Extracting the updated prior parameter values

Also, if I changed S2_P_Bayesian_Interface part into the following:

def S2_P_Bayesian_Interface(mu, sigma, data, trace):
########################################################################################################################
    with pm.Model() as model_P:
            # Obtain the posterior values from initial model:
            # nu_P = from_posterior('nu_0', trace['nu_0'])
            sigma_P = from_posterior('sigma_0', trace['sigma_0'])
            mu_P = from_posterior('mu_0', trace['mu_0'])
            
            print(sigma_P)
            
            # Prior Distributions for unknown model parameters from posterior distribution:
            # nu_P = pm.HalfNormal('nu_P', sigma=sigma)
            # sigma_P = pm.HalfNormal('sigma_P', sigma=np.mean(sigma_P))
            # mu_P = pm.Normal('mu_P', mu=np.mean(mu_P), sigma=np.mean(sigma_P))
            
            # Observed data is from a Likelihood distributions (Likelihood (sampling distribution) of observations):
            observed_data_P = Hypsecant('observed_data_P', mu=mu_P, sigma=sigma_P, observed=data)
            
            # obtain starting values via MAP
            # startvals_P = pm.find_MAP(model=model_P)
            
            # instantiate sampler
            # step_P = pm.Metropolis()  ## Best one
            # step_P = pm.HamiltonianMC()
            # step_P = pm.NUTS()
            # step_P = pm.sample_smc(n_steps=10, cores=2,progressbar=True)
            
            # Printing the result of log_likelihood:
            # print('log_likelihood result:', model_P)
            
            # draw 5000 posterior samples
            trace_P = pm.sample(draws=1000, tune=1000, chains=3, cores=1, progressbar=True)
            # trace_P = pm.sample(start=startvals_P, draws=1500, step=step_P, tune=500, chains=3, cores=1, progressbar=True)
            
            # Obtaining Posterior Predictive Sampling:
            post_pred_P = pm.sample_posterior_predictive(trace_P, samples=1000)
            # post_pred_P = pm.sample_posterior_predictive(trace_P, samples=1500)
            print(post_pred_P['observed_data_P'].shape)
            print('\nSummary: ')
            print(pm.stats.summary(data=trace_P))
            print(pm.stats.summary(data=post_pred_P))
########################################################################################################################
    return trace_P, post_pred_P

I get the following errors:

  File "-----\lib\site-packages\pymc3\distributions\distribution.py", line 971, in _draw_value
    return dist_tmp.random(point=point, size=size)
  in random:
    return generate_samples(stats.hypsecant.rvs, loc=mu, scale=sigma, dist_shape=self.shape, size=size)
  File "------\lib\site-packages\pymc3\distributions\distribution.py", line 1116, in generate_samples
    samples = generator(size=dist_bcast_shape, *args, **kwargs)
  File "------\lib\site-packages\scipy\stats\_distn_infrastructure.py", line 1035, in rvs
    raise ValueError("Domain error in arguments.")

ValueError: Domain error in arguments.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

line 90, in <module>
    trace_S2_P = S2_P_Bayesian_Interface(mu=trace_S2_0['mu_0'], sigma=trace_S2_0['sigma_0'], data=input_data_list[m], trace=trace_S2_0)

, line 36, in S2_P_Bayesian_Interface
    post_pred_P = pm.sample_posterior_predictive(trace_P, samples=1000)

  File "------\lib\site-packages\pymc3\sampling.py", line 1733, in sample_posterior_predictive
    values = draw_values(vars_, point=param, size=size)

  File "------\lib\site-packages\pymc3\distributions\distribution.py", line 791, in draw_values
    value = _draw_value(next_, point=point, givens=temp_givens, size=size)

  File "------\lib\site-packages\pymc3\distributions\distribution.py", line 979, in _draw_value
    val = np.atleast_1d(dist_tmp.random(point=point, size=None))

line 178, in random
    return generate_samples(stats.hypsecant.rvs, loc=mu, scale=sigma, dist_shape=self.shape, size=size)

  File "------\lib\site-packages\pymc3\distributions\distribution.py", line 1116, in generate_samples
    samples = generator(size=dist_bcast_shape, *args, **kwargs)

  File "------\lib\site-packages\scipy\stats\_distn_infrastructure.py", line 1035, in rvs
    raise ValueError("Domain error in arguments.")

ValueError: Domain error in arguments.

I know the error is caused by the random definition but what could be my mistake here?

Side question:

With regards to the naming in the priors, is there a way when you get to S2_P_Bayesian_Interface you can rename the variable name of the priors from e.g. sigma_0 to sigma_P after the from_posterior?