File: state.py

package info (click to toggle)
python-bumps 1.0.3-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,200 kB
  • sloc: python: 24,517; xml: 493; ansic: 373; makefile: 211; javascript: 99; sh: 94
file content (92 lines) | stat: -rw-r--r-- 2,657 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
from collections import deque
from queue import Queue
from typing import Dict, List, Optional, TYPE_CHECKING
from threading import Event
import asyncio

from .state_hdf5_backed import SERIALIZERS

if TYPE_CHECKING:
    import bumps, bumps.fitproblem, bumps.dream.state
    from .webserver import TopicNameType
    from .fit_thread import FitThread


SESSION_FILE_NAME = "session.h5"


class ProblemState:
    fitProblem: Optional["bumps.fitproblem.FitProblem"] = None
    pathlist: Optional[List[str]] = None
    serializer: Optional[SERIALIZERS] = None
    filename: Optional[str] = None


class FittingState:
    abort: bool = False
    population: Optional[List] = None
    uncertainty_state: Optional["bumps.dream.state.MCMCDraw"]


class State:
    # These attributes are ephemeral, not to be serialized/stored:
    hostname: str
    port: int
    parallel: int
    abort_queue: Queue
    fit_thread: Optional["FitThread"] = None
    fit_abort: Optional[Event] = None
    fit_abort_event: Event
    fit_complete_event: Event
    calling_loop: Optional[asyncio.AbstractEventLoop] = None
    fit_enabled: Event
    session_file_name: Optional[str]

    # State to be stored:
    problem: ProblemState
    fitting: FittingState
    topics: Dict["TopicNameType", "deque[Dict]"]

    def __init__(self, problem: Optional[ProblemState] = None, fitting: Optional[FittingState] = None):
        self.problem = problem if problem is not None else ProblemState()
        self.fitting = FittingState()
        self.fit_abort_event = Event()
        self.fit_complete_event = Event()
        self.topics = {
            "log": deque([]),
            "update_parameters": deque([], maxlen=1),
            "update_model": deque([], maxlen=1),
            "model_loaded": deque([], maxlen=1),
            "fit_active": deque([], maxlen=1),
            "convergence_update": deque([], maxlen=1),
            "uncertainty_update": deque([], maxlen=1),
            "fitter_settings": deque([], maxlen=1),
            "fitter_active": deque([], maxlen=1),
        }

    def setup_backing(self, session_file_name: Optional[str] = SESSION_FILE_NAME, read_only: bool = False):
        self.session_file_name = session_file_name

    def save(self):
        pass

    def copy_session_file(self, session_copy_name: str):
        pass

    def write_session_file(self):
        pass

    def cleanup(self):
        self._session_file.close()

    def __del__(self):
        self.cleanup()

    async def async_cleanup(self):
        self.cleanup()

    def __exit__(self, exc_type, exc_value, exc_traceback):
        self.cleanup()

    async def cleanup(self):
        pass