Skip to content

Enable deepcopy of bmb.Model #82

@lt-brs

Description

@lt-brs

Hello !

I tried to deepcopy a bmb.Model and find out that we face a cannot pickle '_thread.lock' object.
After investigation, this is due to saving of thread locked objects within formulae.Environment objects.

Indeed many, locked variables are fetched while calling Environment.capture().
My dummy workaround was to just replace the return cls([frame.f_locals, frame.f_globals])

        if isinstance(env, cls):
            return env
        elif isinstance(env, numbers.Integral):
            depth = env + reference
        else:
            raise TypeError("'env' must be either an integer or an instance of Environment.")
        frame = inspect.currentframe()
        try:
            for _ in range(depth + 1):
                if frame is None:
                    raise ValueError("call-stack is not that deep!")
                frame = frame.f_back
            # return cls([frame.f_locals, frame.f_globals])
            return cls([])
        finally:
            del frame

I'm not experienced enough on Bambi formulae, a good workaround would be to keep only what is necessary for formulae to work in output of the capture() function

I hope it would be helpful

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions