Пример #1
0
    def save_to_file(self, worker: Worker, fname: str) -> None:
        with bz2.open(fname, 'wb') as f:
            f = cast(FileOut, f)  # assert we're doing output

            f.write(PREST_SIGNATURE)
            intC.encode(f, FILE_FORMAT_VERSION)  # version
            strC.encode(f, branding.VERSION)

            work_size = listCP(DatasetCP).get_size(self.datasets)
            intC.encode(f, work_size)

            worker.set_work_size(work_size)
            listCP(DatasetCP).encode(worker, f, self.datasets)
Пример #2
0
    def load_from_file(self, worker: Worker, fname: str) -> None:
        with bz2.open(fname, 'rb') as f:
            f = cast(FileIn, f)  # assert we're doing input

            sig = f.read(len(PREST_SIGNATURE))
            if sig != PREST_SIGNATURE:
                raise PersistenceError('not a Prest workspace file')

            version = intC.decode(f)
            if version >= 3:
                prest_version = strC.decode(f)
            else:
                prest_version = None  # too old

            if version != FILE_FORMAT_VERSION:
                message = 'incompatible PWF version: expected {0}, received {1}'.format(
                    FILE_FORMAT_VERSION,
                    version,
                )

                if prest_version:
                    message += ' (saved by {0})'.format(prest_version)

                raise PersistenceError(message)

            work_size = intC.decode(f)
            worker.set_work_size(work_size)
            datasets = listCP(DatasetCP).decode(worker, f)

        # assign to self only once everything's gone all right
        self.datasets = datasets
Пример #3
0
    def get_codec_progress() -> CodecProgress:
        DatasetHeaderC_encode, DatasetHeaderC_decode = DatasetHeaderC
        subjects_get_size, subjects_encode, subjects_decode = listCP(oneCP(SubjectC))

        def get_size(x : 'BudgetaryConsistency') -> int:
            return subjects_get_size(x.subjects)

        def encode(worker : Worker, f : FileOut, x : 'BudgetaryConsistency') -> None:
            DatasetHeaderC_encode(f, (x.name, x.alternatives))
            subjects_encode(worker, f, x.subjects)

        def decode(worker : Worker, f : FileIn) -> 'BudgetaryConsistency':
            name, alts = DatasetHeaderC_decode(f)
            subjects = subjects_decode(f)
            return BudgetaryConsistency(name, alts, subjects)

        return CodecProgress(get_size, encode, decode)
Пример #4
0
    def get_codec_progress() -> CodecProgress:
        DatasetHeaderC_encode, DatasetHeaderC_decode = DatasetHeaderC
        subjects_size, subjects_encode, subjects_decode = listCP(oneCP(SubjectC))
        intC_encode, intC_decode = intC

        def get_size(x : 'TupleIntransMenus') -> int:
            return subjects_size(x.subjects)

        def encode(worker : Worker, f : FileOut, x : 'TupleIntransMenus') -> None:
            DatasetHeaderC_encode(f, (x.name, x.alternatives))
            subjects_encode(worker, f, x.subjects)

        def decode(worker : Worker, f : FileIn) -> 'TupleIntransMenus':
            ds = TupleIntransMenus(*DatasetHeaderC_decode(f))
            ds.subjects = subjects_decode(worker, f)
            return ds

        return CodecProgress(get_size, encode, decode)
Пример #5
0
    def get_codec_progress() -> CodecProgress:
        DatasetHeaderC_encode, DatasetHeaderC_decode = DatasetHeaderC
        subjects_get_size, subjects_encode, subjects_decode = listCP(oneCP(SubjectC))

        def get_size(x : 'Budgetary') -> int:
            return subjects_get_size(x.subjects)

        def encode(worker : Worker, f : FileOut, x : 'Budgetary') -> None:
            DatasetHeaderC_encode(f, (x.name, x.alternatives))
            subjects_encode(worker, f, x.subjects)

        def decode(worker : Worker, f : FileIn) -> 'Budgetary':
            ds = Budgetary(*DatasetHeaderC_decode(f))
            ds.subjects = subjects_decode(worker, f)
            ds.update_nr_observations()
            return ds

        return CodecProgress(get_size, encode, decode)
Пример #6
0
    def get_codec_progress() -> CodecProgress:
        DatasetHeaderC_encode, DatasetHeaderC_decode = DatasetHeaderC
        subjects_size, subjects_encode, subjects_decode = listCP(
            oneCP(PackedSubjectC))
        intC_encode, intC_decode = intC

        def get_size(x: 'ExperimentalData') -> int:
            return subjects_size(x.subjects)

        def encode(worker: Worker, f: FileOut, x: 'ExperimentalData') -> None:
            DatasetHeaderC_encode(f, (x.name, x.alternatives))
            subjects_encode(worker, f, x.subjects)
            intC_encode(f, x.observ_count)

        def decode(worker: Worker, f: FileIn) -> 'ExperimentalData':
            ds = ExperimentalData(*DatasetHeaderC_decode(f))
            ds.subjects = subjects_decode(worker, f)
            ds.observ_count = intC_decode(f)
            return ds

        return CodecProgress(get_size, encode, decode)
Пример #7
0
    def get_codec_progress() -> CodecProgress:
        DatasetHeaderC_encode, DatasetHeaderC_decode = DatasetHeaderC
        subjects_size, subjects_encode, subjects_decode = listCP(
            oneCP(SubjectC))
        intC_encode, intC_decode = intC

        def get_size(x: 'ConsistencyResult') -> int:
            return subjects_size(x.subjects)

        def encode(worker: Worker, f: FileOut, x: 'ConsistencyResult') -> None:
            DatasetHeaderC_encode(f, (x.name, x.alternatives))
            subjects_encode(worker, f, x.subjects)
            intC_encode(f, x.max_cycle_length)

        def decode(worker: Worker, f: FileIn) -> 'ConsistencyResult':
            ds = ConsistencyResult(*DatasetHeaderC_decode(f))
            ds.subjects = subjects_decode(worker, f)
            ds.max_cycle_length = intC_decode(f)
            return ds

        return CodecProgress(get_size, encode, decode)
Пример #8
0
    def get_codec_progress() -> CodecProgress:
        subjects_encode: Callable[[Worker, FileOut, List[PackedResponse]],
                                  None]
        subjects_decode: Callable[[Worker, FileIn], List[PackedResponse]]

        DatasetHeaderC_encode, DatasetHeaderC_decode = DatasetHeaderC
        subjects_size, subjects_encode, subjects_decode = listCP(
            oneCP(PackedResponseC))
        intC_encode, intC_decode = intC

        def get_size(x: 'EstimationResult') -> int:
            return cast(int, subjects_size(x.subjects))

        def encode(worker: Worker, f: FileOut, x: 'EstimationResult') -> None:
            DatasetHeaderC_encode(f, (x.name, x.alternatives))
            subjects_encode(worker, f, x.subjects)

        def decode(worker: Worker, f: FileIn) -> 'EstimationResult':
            ds = EstimationResult(*DatasetHeaderC_decode(f))
            ds.subjects = subjects_decode(worker, f)
            return ds

        return CodecProgress(get_size, encode, decode)