umaudemc 0.13.1__py3-none-any.whl → 0.15.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- umaudemc/__init__.py +1 -1
- umaudemc/__main__.py +21 -0
- umaudemc/backend/_stormpy.py +2 -3
- umaudemc/backend/bmcalc.py +10 -10
- umaudemc/backend/ltsmin.py +1 -1
- umaudemc/command/check.py +1 -1
- umaudemc/command/graph.py +1 -2
- umaudemc/command/pcheck.py +1 -1
- umaudemc/command/scheck.py +23 -14
- umaudemc/command/sworker.py +185 -0
- umaudemc/command/test.py +3 -63
- umaudemc/common.py +102 -17
- umaudemc/data/select.htm +1 -1
- umaudemc/distributed.py +322 -0
- umaudemc/formatter.py +1 -1
- umaudemc/kleene.py +6 -1
- umaudemc/opsem.py +1 -1
- umaudemc/probabilistic.py +1 -1
- umaudemc/pyslang.py +142 -45
- umaudemc/quatex.py +75 -27
- umaudemc/resources.py +12 -26
- umaudemc/simulators.py +1 -1
- umaudemc/statistical.py +7 -7
- umaudemc/usermsgs.py +6 -0
- umaudemc/webui.py +1 -1
- {umaudemc-0.13.1.dist-info → umaudemc-0.15.0.dist-info}/METADATA +11 -11
- umaudemc-0.15.0.dist-info/RECORD +60 -0
- {umaudemc-0.13.1.dist-info → umaudemc-0.15.0.dist-info}/WHEEL +1 -1
- umaudemc-0.13.1.dist-info/RECORD +0 -58
- {umaudemc-0.13.1.dist-info → umaudemc-0.15.0.dist-info}/entry_points.txt +0 -0
- {umaudemc-0.13.1.dist-info → umaudemc-0.15.0.dist-info/licenses}/LICENSE +0 -0
- {umaudemc-0.13.1.dist-info → umaudemc-0.15.0.dist-info}/top_level.txt +0 -0
umaudemc/quatex.py
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
|
|
5
5
|
import ast
|
|
6
|
+
import os
|
|
6
7
|
|
|
7
8
|
from . import usermsgs
|
|
8
9
|
|
|
@@ -21,7 +22,7 @@ class QuaTExProgram:
|
|
|
21
22
|
# Number of queries
|
|
22
23
|
self.nqueries = len(slots) - ndefs
|
|
23
24
|
|
|
24
|
-
# Query information (line, column, and parameters)
|
|
25
|
+
# Query information (file name, line, column, and parameters)
|
|
25
26
|
self.query_locations = qinfo
|
|
26
27
|
|
|
27
28
|
|
|
@@ -33,9 +34,10 @@ class QuaTExLexer:
|
|
|
33
34
|
LT_STRING = 2
|
|
34
35
|
LT_OTHER = 3
|
|
35
36
|
|
|
36
|
-
def __init__(self, source, buffer_size=512):
|
|
37
|
+
def __init__(self, source, filename, buffer_size=512):
|
|
37
38
|
# Input stream (file-like object)
|
|
38
39
|
self.source = source
|
|
40
|
+
self.filename = filename
|
|
39
41
|
# We read in chunks of buffer_size
|
|
40
42
|
self.buffer_size = buffer_size
|
|
41
43
|
self.buffer = self.source.read(self.buffer_size)
|
|
@@ -221,10 +223,15 @@ class QuaTExParser:
|
|
|
221
223
|
UNARY_OPS = ('!', )
|
|
222
224
|
UNARY_AST = (ast.Not, )
|
|
223
225
|
|
|
224
|
-
def __init__(self, source, filename='<stdin>'):
|
|
225
|
-
self.lexer = QuaTExLexer(source)
|
|
226
|
+
def __init__(self, source, filename='<stdin>', legacy=False):
|
|
226
227
|
# Filename is only used for diagnostics
|
|
227
|
-
self.
|
|
228
|
+
self.lexer = QuaTExLexer(source, filename)
|
|
229
|
+
# PMaude legacy syntax
|
|
230
|
+
self.legacy = legacy
|
|
231
|
+
|
|
232
|
+
# File inclusion support
|
|
233
|
+
self.pending_lexers = []
|
|
234
|
+
self.seen_files = set() if filename.startswith('<') else {os.path.realpath(filename)}
|
|
228
235
|
|
|
229
236
|
# Parameters of the current function
|
|
230
237
|
self.fvars = []
|
|
@@ -246,10 +253,10 @@ class QuaTExParser:
|
|
|
246
253
|
self.queries = []
|
|
247
254
|
self.defs = []
|
|
248
255
|
|
|
249
|
-
def _eprint(self, msg, line=None, column=None):
|
|
256
|
+
def _eprint(self, msg, line=None, column=None, fname=None):
|
|
250
257
|
"""Print an error message with line information"""
|
|
251
258
|
|
|
252
|
-
usermsgs.print_error_loc(self.filename,
|
|
259
|
+
usermsgs.print_error_loc(fname or self.lexer.filename,
|
|
253
260
|
line or self.lexer.sline,
|
|
254
261
|
column or self.lexer.scolumn,
|
|
255
262
|
msg)
|
|
@@ -275,6 +282,19 @@ class QuaTExParser:
|
|
|
275
282
|
|
|
276
283
|
return self.stack and self.stack[-1] == state
|
|
277
284
|
|
|
285
|
+
def _next_token(self):
|
|
286
|
+
"""Get the next token without potential file exhaustion"""
|
|
287
|
+
|
|
288
|
+
token = self.lexer.get_token()
|
|
289
|
+
|
|
290
|
+
while self.lexer.exhausted and self.pending_lexers:
|
|
291
|
+
self.lexer, open_file = self.pending_lexers.pop()
|
|
292
|
+
open_file.close()
|
|
293
|
+
|
|
294
|
+
token = self.lexer.get_token()
|
|
295
|
+
|
|
296
|
+
return token
|
|
297
|
+
|
|
278
298
|
def _do_binop(self, op_index, left, right):
|
|
279
299
|
"""Build a binary operator in the AST"""
|
|
280
300
|
|
|
@@ -458,8 +478,8 @@ class QuaTExParser:
|
|
|
458
478
|
self.ok = False
|
|
459
479
|
|
|
460
480
|
slot = self.fslots.setdefault(call_name, len(self.fslots))
|
|
461
|
-
current = ast.Tuple([ast.Constant(inside_next), ast.Constant(slot), *args],
|
|
462
|
-
|
|
481
|
+
current = ast.Tuple([ast.Constant(inside_next), ast.Constant(slot), *args], ast.Load())
|
|
482
|
+
current.custom_loc = (call_line, call_column)
|
|
463
483
|
self.calls.append((call_name, call_line, call_column, len(args)))
|
|
464
484
|
inside_next = False
|
|
465
485
|
call_name = None
|
|
@@ -482,7 +502,7 @@ class QuaTExParser:
|
|
|
482
502
|
line, column = self.lexer.sline, self.lexer.scolumn
|
|
483
503
|
next_token = self.lexer.get_token()
|
|
484
504
|
|
|
485
|
-
# A call to s.
|
|
505
|
+
# A call to s.rval
|
|
486
506
|
if token == 's' and next_token == '.':
|
|
487
507
|
if not self._expect('rval', '('):
|
|
488
508
|
return None
|
|
@@ -490,7 +510,8 @@ class QuaTExParser:
|
|
|
490
510
|
token = self.lexer.get_token()
|
|
491
511
|
ltype = self.lexer.ltype
|
|
492
512
|
|
|
493
|
-
if ltype not in (self.lexer.LT_NAME, self.lexer.LT_STRING
|
|
513
|
+
if ltype not in (self.lexer.LT_NAME, self.lexer.LT_STRING) and \
|
|
514
|
+
not (self.legacy and ltype == self.lexer.LT_NUMBER):
|
|
494
515
|
self._eprint(f's.rval only admits string literals and variables, but "{token}" is found.')
|
|
495
516
|
return None
|
|
496
517
|
|
|
@@ -596,17 +617,44 @@ class QuaTExParser:
|
|
|
596
617
|
def _parse_toplevel(self):
|
|
597
618
|
"""Parse the top level of a QuaTeX file"""
|
|
598
619
|
|
|
599
|
-
token
|
|
600
|
-
|
|
601
|
-
while not self.lexer.exhausted:
|
|
620
|
+
while token := self._next_token():
|
|
602
621
|
|
|
603
622
|
# Any top level statement starts with eval or other identifier
|
|
604
623
|
if self.lexer.ltype != self.lexer.LT_NAME:
|
|
605
624
|
self._eprint(f'unexpected token "{token}" at the top level.')
|
|
606
625
|
return False
|
|
607
626
|
|
|
627
|
+
# Import statement -- import "filename" ;
|
|
628
|
+
if token == 'import':
|
|
629
|
+
line, column = self.lexer.sline, self.lexer.scolumn
|
|
630
|
+
|
|
631
|
+
# Get the filename, it must be a string
|
|
632
|
+
path = self.lexer.get_token()
|
|
633
|
+
|
|
634
|
+
if self.lexer.ltype != self.lexer.LT_STRING:
|
|
635
|
+
self._eprint(f'unexpected token "{path}" where a string is required.')
|
|
636
|
+
return False
|
|
637
|
+
|
|
638
|
+
if not self._expect(';'):
|
|
639
|
+
return False
|
|
640
|
+
|
|
641
|
+
# Check whether the file exists
|
|
642
|
+
new_path = os.path.join(os.path.dirname(self.lexer.filename), path[1:-1])
|
|
643
|
+
|
|
644
|
+
if not os.path.exists(new_path):
|
|
645
|
+
self._eprint(f'cannot import {path}, file not found', line, column)
|
|
646
|
+
return False
|
|
647
|
+
|
|
648
|
+
# Jump to that file if it has not been processed yet
|
|
649
|
+
if (canonical_path := os.path.realpath(new_path)) not in self.seen_files:
|
|
650
|
+
self.seen_files.add(canonical_path)
|
|
651
|
+
|
|
652
|
+
new_file = open(new_path)
|
|
653
|
+
self.pending_lexers.append((self.lexer, new_file))
|
|
654
|
+
self.lexer = QuaTExLexer(new_file, new_path)
|
|
655
|
+
|
|
608
656
|
# Query -- eval E [ <expr> ] ;
|
|
609
|
-
|
|
657
|
+
elif token == 'eval':
|
|
610
658
|
# The query location is kept for future reference
|
|
611
659
|
line, column = self.lexer.sline, self.lexer.scolumn
|
|
612
660
|
|
|
@@ -638,10 +686,10 @@ class QuaTExParser:
|
|
|
638
686
|
|
|
639
687
|
# Ignore parameterized expressions with empty range
|
|
640
688
|
if parameter and parameter[1] > parameter[3]:
|
|
641
|
-
usermsgs.print_warning_loc(self.filename, line, column,
|
|
689
|
+
usermsgs.print_warning_loc(self.lexer.filename, line, column,
|
|
642
690
|
'ignoring parametric query with empty range.')
|
|
643
691
|
else:
|
|
644
|
-
self.queries.append((line, column, expr, parameter))
|
|
692
|
+
self.queries.append((self.lexer.filename, line, column, expr, parameter))
|
|
645
693
|
|
|
646
694
|
# Function definition -- <name> ( <args> ) = <expr> ;
|
|
647
695
|
else:
|
|
@@ -684,8 +732,6 @@ class QuaTExParser:
|
|
|
684
732
|
self.defs.append((fname, line, column, tuple(self.fvars), expr))
|
|
685
733
|
self.fvars.clear()
|
|
686
734
|
|
|
687
|
-
token = self.lexer.get_token()
|
|
688
|
-
|
|
689
735
|
return self.ok
|
|
690
736
|
|
|
691
737
|
def _check_tail(self, expr):
|
|
@@ -732,7 +778,7 @@ class QuaTExParser:
|
|
|
732
778
|
else:
|
|
733
779
|
arities[name] = len(args)
|
|
734
780
|
|
|
735
|
-
# Check whether all
|
|
781
|
+
# Check whether all calls are well-defined
|
|
736
782
|
for name, line, column, arity in self.calls:
|
|
737
783
|
def_arity = arities.get(name)
|
|
738
784
|
|
|
@@ -751,7 +797,7 @@ class QuaTExParser:
|
|
|
751
797
|
if not self._check_tail(expr):
|
|
752
798
|
ok = False
|
|
753
799
|
|
|
754
|
-
for
|
|
800
|
+
for _, _, _, expr, _ in self.queries:
|
|
755
801
|
if not self._check_tail(expr):
|
|
756
802
|
ok = False
|
|
757
803
|
|
|
@@ -782,26 +828,28 @@ class QuaTExParser:
|
|
|
782
828
|
line=line, column=column)
|
|
783
829
|
ok = False
|
|
784
830
|
|
|
785
|
-
for k, (line, column, expr, _) in enumerate(self.queries):
|
|
831
|
+
for k, (fname, line, column, expr, _) in enumerate(self.queries):
|
|
786
832
|
try:
|
|
787
833
|
expr = ast.Expression(expr)
|
|
788
834
|
ast.fix_missing_locations(expr)
|
|
789
|
-
slots[used_defs + k] = compile(expr, filename=f'query{line}:{column}', mode='eval')
|
|
835
|
+
slots[used_defs + k] = compile(expr, filename=f'query{fname}:{line}:{column}', mode='eval')
|
|
790
836
|
|
|
791
837
|
except TypeError:
|
|
792
838
|
self._eprint('this query cannot cannot be compiled.',
|
|
793
|
-
line=line, column=column)
|
|
839
|
+
line=line, column=column, fname=fname)
|
|
794
840
|
ok = False
|
|
795
841
|
|
|
796
842
|
if not ok:
|
|
797
843
|
return None
|
|
798
844
|
|
|
799
845
|
return QuaTExProgram(slots, varnames, len(self.fslots),
|
|
800
|
-
tuple((line, column, params) for line, column, _, params in self.queries))
|
|
846
|
+
tuple((fname, line, column, params) for fname, line, column, _, params in self.queries))
|
|
801
847
|
|
|
802
848
|
|
|
803
|
-
def parse_quatex(input_file, filename='<string>'):
|
|
849
|
+
def parse_quatex(input_file, filename='<string>', legacy=False):
|
|
804
850
|
"""Parse a QuaTEx formula"""
|
|
805
851
|
|
|
806
852
|
# Load, parse, and compile the QuaTEx file
|
|
807
|
-
|
|
853
|
+
parser = QuaTExParser(input_file, filename=filename, legacy=legacy)
|
|
854
|
+
|
|
855
|
+
return parser.parse(), parser.seen_files
|
umaudemc/resources.py
CHANGED
|
@@ -3,45 +3,31 @@
|
|
|
3
3
|
#
|
|
4
4
|
# These are included in the package tree and they should be loaded
|
|
5
5
|
# even if the package is distributed as a compressed archive. This is
|
|
6
|
-
# possible with importlib.resources
|
|
7
|
-
# importlib_resources in previous versions.
|
|
6
|
+
# possible with importlib.resources.
|
|
8
7
|
#
|
|
9
8
|
|
|
10
|
-
import sys
|
|
11
9
|
import importlib.resources as pkg_resources
|
|
12
10
|
|
|
13
11
|
from . import data # Import the data directory as a package
|
|
14
12
|
|
|
15
|
-
#
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def get_resource_path(name):
|
|
19
|
-
"""Get a temporary filename for a given named resource"""
|
|
20
|
-
return pkg_resources.as_file(pkg_resources.files(data) / name)
|
|
13
|
+
# Root for static resources
|
|
14
|
+
_DATA_ROOT = pkg_resources.files(data)
|
|
21
15
|
|
|
22
|
-
def get_resource_content(name):
|
|
23
|
-
"""Get the string content of a given named resource"""
|
|
24
|
-
return (pkg_resources.files(data) / name).read_text()
|
|
25
16
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
17
|
+
def get_resource_path(name):
|
|
18
|
+
"""Get a temporary filename for a given named resource"""
|
|
19
|
+
return pkg_resources.as_file(_DATA_ROOT / name)
|
|
29
20
|
|
|
30
|
-
# For compatibility with Python 3.8
|
|
31
|
-
else:
|
|
32
|
-
def get_resource_path(name):
|
|
33
|
-
"""Get a temporary filename for a given named resource"""
|
|
34
|
-
return pkg_resources.path(data, name)
|
|
35
21
|
|
|
22
|
+
def get_resource_content(name):
|
|
23
|
+
"""Get the string content of a given named resource"""
|
|
24
|
+
return (_DATA_ROOT / name).read_text()
|
|
36
25
|
|
|
37
|
-
def get_resource_content(name):
|
|
38
|
-
"""Get the string content of a given named resource"""
|
|
39
|
-
return pkg_resources.read_text(data, name)
|
|
40
26
|
|
|
27
|
+
def get_resource_binary(name):
|
|
28
|
+
"""Get the string content of a given named resource"""
|
|
29
|
+
return (_DATA_ROOT / name).read_bytes()
|
|
41
30
|
|
|
42
|
-
def get_resource_binary(name):
|
|
43
|
-
"""Get the string content of a given named resource"""
|
|
44
|
-
return pkg_resources.read_binary(data, name)
|
|
45
31
|
|
|
46
32
|
def get_templog():
|
|
47
33
|
"""Get a temporary filename for the templog Maude file"""
|
umaudemc/simulators.py
CHANGED
umaudemc/statistical.py
CHANGED
|
@@ -133,9 +133,9 @@ def check_interval(qdata, num_sims, alpha, delta, quantile, verbose):
|
|
|
133
133
|
# Whether the size of the confidence interval for all queries have converged
|
|
134
134
|
converged = True
|
|
135
135
|
|
|
136
|
-
for
|
|
136
|
+
for query in qdata:
|
|
137
137
|
query.mu = query.sum / num_sims
|
|
138
|
-
query.s = math.sqrt((query.sum_sq - query.sum * query.mu) / (num_sims - 1))
|
|
138
|
+
query.s = math.sqrt(max(query.sum_sq - query.sum * query.mu, 0.0) / (num_sims - 1))
|
|
139
139
|
query.h = query.s * tinv
|
|
140
140
|
|
|
141
141
|
if query.h > delta:
|
|
@@ -233,7 +233,7 @@ def run_parallel(program, qdata, num_sims, max_sim, simulator, alpha, delta, blo
|
|
|
233
233
|
# Process communication stuff
|
|
234
234
|
|
|
235
235
|
# Random number seeds
|
|
236
|
-
seeds = [random.
|
|
236
|
+
seeds = [random.getrandbits(20) for _ in range(jobs)]
|
|
237
237
|
# Queue for transferring the query evaluations
|
|
238
238
|
queue = mp.Queue()
|
|
239
239
|
barrier = mp.Barrier(jobs + 1)
|
|
@@ -285,7 +285,7 @@ def qdata_to_dict(num_sims, qdata, program):
|
|
|
285
285
|
qdata_it = iter(qdata)
|
|
286
286
|
q = next(qdata_it, None)
|
|
287
287
|
|
|
288
|
-
for k, (line, column, params) in enumerate(program.query_locations):
|
|
288
|
+
for k, (fname, line, column, params) in enumerate(program.query_locations):
|
|
289
289
|
# For parametric queries, we return an array of values
|
|
290
290
|
if params:
|
|
291
291
|
mean, std, radius = [], [], []
|
|
@@ -303,7 +303,7 @@ def qdata_to_dict(num_sims, qdata, program):
|
|
|
303
303
|
mean, std, radius = q.mu, q.s, q.h
|
|
304
304
|
param_info = {}
|
|
305
305
|
|
|
306
|
-
queries.append(dict(mean=mean, std=std, radius=radius, line=line, column=column, **param_info))
|
|
306
|
+
queries.append(dict(mean=mean, std=std, radius=radius, file=fname, line=line, column=column, **param_info))
|
|
307
307
|
|
|
308
308
|
return dict(nsims=num_sims, queries=queries)
|
|
309
309
|
|
|
@@ -326,10 +326,10 @@ def check(program, simulator, seed, alpha, delta, block, min_sim, max_sim, jobs,
|
|
|
326
326
|
# and the sum of their squares
|
|
327
327
|
qdata = [QueryData(k, idict)
|
|
328
328
|
for k, qinfo in enumerate(program.query_locations)
|
|
329
|
-
for idict in make_parameter_dicts(qinfo[
|
|
329
|
+
for idict in make_parameter_dicts(qinfo[3])]
|
|
330
330
|
|
|
331
331
|
# Run the simulations
|
|
332
|
-
if jobs == 1:
|
|
332
|
+
if jobs == 1 and num_sims != 1:
|
|
333
333
|
return run_single(program, qdata, num_sims, max_sim, simulator, alpha,
|
|
334
334
|
delta, block, verbose=verbose)
|
|
335
335
|
else:
|
umaudemc/usermsgs.py
CHANGED
|
@@ -23,6 +23,12 @@ def print_error_loc(unit, line, column, msg):
|
|
|
23
23
|
print(f'{tmn.bold}{unit}:{line}:{column}: {tmn.red}error:{tmn.reset} {msg}')
|
|
24
24
|
|
|
25
25
|
|
|
26
|
+
def print_error_file(msg, unit):
|
|
27
|
+
"""Print an error with a location"""
|
|
28
|
+
|
|
29
|
+
print(f'{tmn.bold}{unit}: {tmn.red}error:{tmn.reset} {msg}')
|
|
30
|
+
|
|
31
|
+
|
|
26
32
|
def print_warning_loc(unit, line, column, msg):
|
|
27
33
|
"""Print a warning with a location"""
|
|
28
34
|
|
umaudemc/webui.py
CHANGED
|
@@ -142,7 +142,7 @@ class WinPathHandler(PathHandler):
|
|
|
142
142
|
|
|
143
143
|
|
|
144
144
|
class ConnectionInfo:
|
|
145
|
-
"""
|
|
145
|
+
"""Persistent server information"""
|
|
146
146
|
|
|
147
147
|
def __init__(self):
|
|
148
148
|
self.path_handler = WinPathHandler() if sys.platform == 'win32' else PathHandler()
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: umaudemc
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.15.0
|
|
4
4
|
Summary: Unified Maude model-checking utility
|
|
5
5
|
Author-email: ningit <ningit@users.noreply.github.com>
|
|
6
|
-
License:
|
|
6
|
+
License-Expression: GPL-3.0-or-later
|
|
7
7
|
Project-URL: Homepage, https://github.com/fadoss/umaudemc
|
|
8
8
|
Project-URL: Bug Tracker, https://github.com/fadoss/umaudemc/issues
|
|
9
9
|
Project-URL: Documentation, https://github.com/fadoss/umaudemc
|
|
10
10
|
Project-URL: Source Code, https://github.com/fadoss/umaudemc
|
|
11
11
|
Classifier: Programming Language :: Python :: 3
|
|
12
12
|
Classifier: Intended Audience :: Science/Research
|
|
13
|
-
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
14
13
|
Classifier: Topic :: Scientific/Engineering
|
|
15
14
|
Classifier: Operating System :: OS Independent
|
|
16
|
-
Requires-Python: >=3.
|
|
15
|
+
Requires-Python: >=3.9
|
|
17
16
|
Description-Content-Type: text/markdown
|
|
18
17
|
License-File: LICENSE
|
|
19
|
-
Requires-Dist: maude
|
|
18
|
+
Requires-Dist: maude>=1.0
|
|
20
19
|
Provides-Extra: ctlstar
|
|
21
|
-
Requires-Dist: pyModelChecking
|
|
20
|
+
Requires-Dist: pyModelChecking>=1.3.3; extra == "ctlstar"
|
|
21
|
+
Provides-Extra: yaml
|
|
22
|
+
Requires-Dist: pyaml; extra == "yaml"
|
|
22
23
|
Provides-Extra: plot
|
|
23
|
-
Requires-Dist: matplotlib
|
|
24
|
+
Requires-Dist: matplotlib; extra == "plot"
|
|
24
25
|
Provides-Extra: smc
|
|
25
|
-
Requires-Dist: scipy
|
|
26
|
-
|
|
27
|
-
Requires-Dist: pyaml ; extra == 'yaml'
|
|
26
|
+
Requires-Dist: scipy; extra == "smc"
|
|
27
|
+
Dynamic: license-file
|
|
28
28
|
|
|
29
29
|
# Unified Maude model-checking tool
|
|
30
30
|
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
umaudemc/__init__.py,sha256=iCWCR3zceWVR3HY2_dnmoKBKY7eAZrsQ5pfmt6srIVw,23
|
|
2
|
+
umaudemc/__main__.py,sha256=x7HLEryX--lIKW1JYjF66XLZQ9lUnAQmd2ADGRipEfo,14823
|
|
3
|
+
umaudemc/api.py,sha256=I-o5foy8NUlO4JT4pX9L7kkuHQG_8_GMkWlOKt708E8,19733
|
|
4
|
+
umaudemc/backends.py,sha256=mzJkALYwcKPInT0lBiRsCxJSewKvx5j_akQsqWN1Ezo,4590
|
|
5
|
+
umaudemc/common.py,sha256=UcIf7hTpP2qjcT9u_9-UcYR0nNeosx1xRZW7wsuT2bE,7305
|
|
6
|
+
umaudemc/counterprint.py,sha256=vVqM_UjGRk_xeftFxBGI5m6cQXV7mf8KvbQ_fvAvSQk,9226
|
|
7
|
+
umaudemc/distributed.py,sha256=6iR02PYQBZOWZ3bIm7AP-sCSFdTazXHb25FqldUxIg8,8653
|
|
8
|
+
umaudemc/formatter.py,sha256=nbQlIsR5Xv18OEcpJdnTDGqO9xGL_amvBGFMU2OmheU,6026
|
|
9
|
+
umaudemc/formulae.py,sha256=jZPPDhjgsb7cs5rWvitiQoO0fd8JIlK98at2SN-LzVE,12156
|
|
10
|
+
umaudemc/grapher.py,sha256=K1chKNNlEzQvfOsiFmRPJmd9OpxRIrg6OyiMW6gqOCU,4348
|
|
11
|
+
umaudemc/gtk.py,sha256=61p4_OSFDfNHFD4lLz3QTZ7yZBra3RINmgbcnB-mUis,4249
|
|
12
|
+
umaudemc/jani.py,sha256=N5tE28jZC_OsI041nXOn02THlokpweATtEK-nx9pfWE,4130
|
|
13
|
+
umaudemc/kleene.py,sha256=sW5SGdXpbLrjGtihPn8qgnhSH5WgltFaLVRx6GLwQU4,4697
|
|
14
|
+
umaudemc/mproc.py,sha256=9X5pTb3Z3XHcdOo8ynH7I5RZQpjzm9xr4IBbEtaglUE,11766
|
|
15
|
+
umaudemc/opsem.py,sha256=Xfdi9QGy-vcpmQ9ni8lBDAlKNw-fCRzYr6wnPbv6m1s,9448
|
|
16
|
+
umaudemc/probabilistic.py,sha256=MNvFeEd84-OYedSnyksZB87UckPfwizVNJepCItgRy8,29306
|
|
17
|
+
umaudemc/pyslang.py,sha256=zOfVGtfnOWDGghtaYLfQHq61KvbzVFmAM_0-upNhrTk,87753
|
|
18
|
+
umaudemc/quatex.py,sha256=SQAbVz1csGXGqcfzFcjP89BdIpN8K2aiwP_PMLGPr1o,23239
|
|
19
|
+
umaudemc/resources.py,sha256=qKqvgLYTJVtsQHQMXFObyCLTo6-fssQeu_mG7tvVyD0,932
|
|
20
|
+
umaudemc/simulators.py,sha256=Lk50Ql7hWUasWkQSWxboeR5LYfJtpwrANjUDuxYjuZ4,13232
|
|
21
|
+
umaudemc/statistical.py,sha256=buthWv4ovvxsvDs0eWgJw7lX2_9BsnLsW_PxW17RHCI,9087
|
|
22
|
+
umaudemc/terminal.py,sha256=B4GWLyW4Sdymgoavj418y4TI4MnWqNu3JS4BBoSYeTc,1037
|
|
23
|
+
umaudemc/usermsgs.py,sha256=h4VPxljyKidEI8vpPcToKJA6mcLu9PtMkIh6vH3rDuA,719
|
|
24
|
+
umaudemc/webui.py,sha256=XlDV87tOOdcclHp2_oerrvHwRmCZdqAR4PppqeZm47A,11072
|
|
25
|
+
umaudemc/wrappers.py,sha256=uz9JV1zBVqzkuoByUd569fEcSxT_00aCJw-jcDtrFpE,9399
|
|
26
|
+
umaudemc/backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
27
|
+
umaudemc/backend/_pymc.py,sha256=asfN3uc0PbizVTiBt0Hs1n7jxzUN629Baj90z5X8Gjc,6679
|
|
28
|
+
umaudemc/backend/_spot.py,sha256=rwnXJG98kLsjjobeYdFh5RqK07al0bGMzjz2gLnUPOQ,9166
|
|
29
|
+
umaudemc/backend/_storm.py,sha256=yhHPNxLOekr9ZdzZv5Jzv1K6R5hIrYKQ4SES0rds_0A,4675
|
|
30
|
+
umaudemc/backend/_stormpy.py,sha256=gdFFHupp6o-8IEk-NxBaSWFz7zohJWxj27CUdrMNeXg,8253
|
|
31
|
+
umaudemc/backend/bmcalc.py,sha256=cgV11KmvqT-k1TpsdFHJp1bPrY0Wmlh1pG8XkVpO8G4,17874
|
|
32
|
+
umaudemc/backend/ltsmin.py,sha256=5r7o8KTKiQeSW6xSK7sV08rs9l0wb4IOPizJW3T_n1o,21104
|
|
33
|
+
umaudemc/backend/nusmv.py,sha256=ebHWUYv6IcOedD2qsafqyvmEjLaxMmCMBy3tyAfrYUE,10913
|
|
34
|
+
umaudemc/backend/prism.py,sha256=a78MEMXDRD-QRheQIDiAgVKDPyqkQ8iTAWmRE6lsKH4,15502
|
|
35
|
+
umaudemc/backend/pymc.py,sha256=_NXTEpXsf0s5_WE3-1y63jx6iKj2KSjmn8hZZcWMltI,309
|
|
36
|
+
umaudemc/backend/spin.py,sha256=fe5w1YyVQ3LHGiP7jVex5yXC17CwTHlPvM4B3j7kvwk,9663
|
|
37
|
+
umaudemc/backend/spot.py,sha256=P7vkxhY7Tx9J_rOmlua3bfiO8iMgNIuEi25ZNYZRLHk,283
|
|
38
|
+
umaudemc/backend/storm.py,sha256=FlhJ0ZkJO84GjEUxuE2hQQJxJoeE_lElBB5NJL4NXTU,276
|
|
39
|
+
umaudemc/command/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
40
|
+
umaudemc/command/check.py,sha256=PyaPDMw5OnPxSIZ10U4we0b5tTrjnYKAtAeQkJh2uLE,12031
|
|
41
|
+
umaudemc/command/graph.py,sha256=JqGzESC2sn-LBh2sqctrij03ItzwDO808s2qkNKUle0,6112
|
|
42
|
+
umaudemc/command/pcheck.py,sha256=eV4e4GcOHanP4hcIhMKd5Js22_ONac6kYj70FXun3mY,7274
|
|
43
|
+
umaudemc/command/scheck.py,sha256=jiVNsLfbNDUleWl9HuNW7GTQdszd5cefZJn0_Epm9UU,4967
|
|
44
|
+
umaudemc/command/sworker.py,sha256=hZv7hpZg3Z-BnTtYqNwG7y2Njyr3NMV7-EIANrj8POM,4344
|
|
45
|
+
umaudemc/command/test.py,sha256=Ru21JXNF61F5N5jayjwxp8okIjOAvuZuAlV_5ltQ-GU,37088
|
|
46
|
+
umaudemc/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
47
|
+
umaudemc/data/opsem.maude,sha256=geDP3_RMgtS1rRmYOybJDCXn_-dyHHxg0JxfYg1ftv0,27929
|
|
48
|
+
umaudemc/data/problog.maude,sha256=qvP90peT3J9gWi7I0x86jfrEXsVxDP5lcrUnSkTMhcY,3091
|
|
49
|
+
umaudemc/data/result.htm,sha256=IwllBM3p4F-QFvOYZZR6bZicL-FuuPLainU9DUPPyNA,1766
|
|
50
|
+
umaudemc/data/select.htm,sha256=CC9lkczPnLgqxeiSyn2Kv3oxLuuciPjtBzOHfnSv-SE,4593
|
|
51
|
+
umaudemc/data/smcgraph.js,sha256=iCNQNmsuGdL_GLnqVhGDisediFtedxw3C24rxSiQwx8,6674
|
|
52
|
+
umaudemc/data/smcview.css,sha256=ExFqrMkSeaf8VxFrJXflyCsRW3FTwbv78q0Hoo2UVrM,3833
|
|
53
|
+
umaudemc/data/smcview.js,sha256=_fHum1DRU1mhco-9-c6KqTLgiC5u_cCUf61jIK7wcIQ,14509
|
|
54
|
+
umaudemc/data/templog.maude,sha256=TZ-66hVWoG6gp7gJpS6FsQn7dpBTLrr76bKo-UfHGcA,9161
|
|
55
|
+
umaudemc-0.15.0.dist-info/licenses/LICENSE,sha256=MrEGL32oSWfnAZ0Bq4BZNcqnq3Mhp87Q4w6-deXfFnA,17992
|
|
56
|
+
umaudemc-0.15.0.dist-info/METADATA,sha256=MQLEOo16TB5BJRq90duHk0UTEMVF8i8MeENz7jt1OdE,1654
|
|
57
|
+
umaudemc-0.15.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
58
|
+
umaudemc-0.15.0.dist-info/entry_points.txt,sha256=8rYRlLkn4orZtAoujDSeol1t_UFBrK0bfjmLTNv9B44,52
|
|
59
|
+
umaudemc-0.15.0.dist-info/top_level.txt,sha256=Yo_CF78HLGBSblk3890qLcx6XZ17zHCbGcT9iG8sfMw,9
|
|
60
|
+
umaudemc-0.15.0.dist-info/RECORD,,
|
umaudemc-0.13.1.dist-info/RECORD
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
umaudemc/__init__.py,sha256=pMjW1X1oCiVe0NrTCY4GkT0Wt53V0JJzr08mFS8RKk8,23
|
|
2
|
-
umaudemc/__main__.py,sha256=PBIa2mStJwNIK5YnwoCefEB_a59VLkHE_Zp_1hnMyg4,14060
|
|
3
|
-
umaudemc/api.py,sha256=I-o5foy8NUlO4JT4pX9L7kkuHQG_8_GMkWlOKt708E8,19733
|
|
4
|
-
umaudemc/backends.py,sha256=mzJkALYwcKPInT0lBiRsCxJSewKvx5j_akQsqWN1Ezo,4590
|
|
5
|
-
umaudemc/common.py,sha256=5jtR_HLZmTDrZFU2Isd3tJudZdMD-RbkiuHMUA3wPiE,4922
|
|
6
|
-
umaudemc/counterprint.py,sha256=vVqM_UjGRk_xeftFxBGI5m6cQXV7mf8KvbQ_fvAvSQk,9226
|
|
7
|
-
umaudemc/formatter.py,sha256=36l0nc9IIe4B0_eW_PPfDTIxJj0mHKZfddCUugrEyjM,6024
|
|
8
|
-
umaudemc/formulae.py,sha256=jZPPDhjgsb7cs5rWvitiQoO0fd8JIlK98at2SN-LzVE,12156
|
|
9
|
-
umaudemc/grapher.py,sha256=K1chKNNlEzQvfOsiFmRPJmd9OpxRIrg6OyiMW6gqOCU,4348
|
|
10
|
-
umaudemc/gtk.py,sha256=61p4_OSFDfNHFD4lLz3QTZ7yZBra3RINmgbcnB-mUis,4249
|
|
11
|
-
umaudemc/jani.py,sha256=N5tE28jZC_OsI041nXOn02THlokpweATtEK-nx9pfWE,4130
|
|
12
|
-
umaudemc/kleene.py,sha256=Yxo9O2rjJNpS6y4Qfb_SP71tDrryV0KKUfmBIKXypwg,4458
|
|
13
|
-
umaudemc/mproc.py,sha256=9X5pTb3Z3XHcdOo8ynH7I5RZQpjzm9xr4IBbEtaglUE,11766
|
|
14
|
-
umaudemc/opsem.py,sha256=p49k8Dto0zJ7jeI8Ih5Q9bB4lqMQaF39kxprlvCMN3U,9448
|
|
15
|
-
umaudemc/probabilistic.py,sha256=f1ZtV84mAuaaGSmYCpun8gaUi5PFGCPD96BUgYvvBGk,29304
|
|
16
|
-
umaudemc/pyslang.py,sha256=m501iqJb4fVlIimpOy_tO7woK5QLkTWYav0no7onoXM,85099
|
|
17
|
-
umaudemc/quatex.py,sha256=HQoiC8N7WnloHPBgNlcpWUi0NcIyUXm3IK_glfHbu4A,21611
|
|
18
|
-
umaudemc/resources.py,sha256=k1sekrTafAcOb7GQN-mx2BgCBEBPUi-IR_4EjNjRRmU,1530
|
|
19
|
-
umaudemc/simulators.py,sha256=84W30MWWe4QRxK24RGA0zuwXjPya4wH18PrhPKdOpyU,13229
|
|
20
|
-
umaudemc/statistical.py,sha256=g5tfSzRWzKWivP793dxXuUJ1ftRrJKlSi27qvPPMxZs,9056
|
|
21
|
-
umaudemc/terminal.py,sha256=B4GWLyW4Sdymgoavj418y4TI4MnWqNu3JS4BBoSYeTc,1037
|
|
22
|
-
umaudemc/usermsgs.py,sha256=d3RfyBGEBmcV_c2MeXWCtZIiiM2vFnaHsN3MHwMnyAs,583
|
|
23
|
-
umaudemc/webui.py,sha256=7dWf5VVl5dGN9oBVTT8m6F4v_QqEbsKSH67q5FljuT8,11071
|
|
24
|
-
umaudemc/wrappers.py,sha256=uz9JV1zBVqzkuoByUd569fEcSxT_00aCJw-jcDtrFpE,9399
|
|
25
|
-
umaudemc/backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
26
|
-
umaudemc/backend/_pymc.py,sha256=asfN3uc0PbizVTiBt0Hs1n7jxzUN629Baj90z5X8Gjc,6679
|
|
27
|
-
umaudemc/backend/_spot.py,sha256=rwnXJG98kLsjjobeYdFh5RqK07al0bGMzjz2gLnUPOQ,9166
|
|
28
|
-
umaudemc/backend/_storm.py,sha256=yhHPNxLOekr9ZdzZv5Jzv1K6R5hIrYKQ4SES0rds_0A,4675
|
|
29
|
-
umaudemc/backend/_stormpy.py,sha256=KPbRkVYZhwlL007GfbJJc2VBHbBz3_UKqUNM0FV7PyU,8280
|
|
30
|
-
umaudemc/backend/bmcalc.py,sha256=fE6RxIETYu-ywzrwRvWJP5ZZbZXuUbO6TdV4bcJjA6E,17502
|
|
31
|
-
umaudemc/backend/ltsmin.py,sha256=iZNzVQ74oiMOdIv1zNW8oeiLzGO88ENqLfhPQ20i4E0,21103
|
|
32
|
-
umaudemc/backend/nusmv.py,sha256=ebHWUYv6IcOedD2qsafqyvmEjLaxMmCMBy3tyAfrYUE,10913
|
|
33
|
-
umaudemc/backend/prism.py,sha256=a78MEMXDRD-QRheQIDiAgVKDPyqkQ8iTAWmRE6lsKH4,15502
|
|
34
|
-
umaudemc/backend/pymc.py,sha256=_NXTEpXsf0s5_WE3-1y63jx6iKj2KSjmn8hZZcWMltI,309
|
|
35
|
-
umaudemc/backend/spin.py,sha256=fe5w1YyVQ3LHGiP7jVex5yXC17CwTHlPvM4B3j7kvwk,9663
|
|
36
|
-
umaudemc/backend/spot.py,sha256=P7vkxhY7Tx9J_rOmlua3bfiO8iMgNIuEi25ZNYZRLHk,283
|
|
37
|
-
umaudemc/backend/storm.py,sha256=FlhJ0ZkJO84GjEUxuE2hQQJxJoeE_lElBB5NJL4NXTU,276
|
|
38
|
-
umaudemc/command/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
39
|
-
umaudemc/command/check.py,sha256=fzRUGAHNudZPYFk94ekwKplv9N7Fhsrmf5pOFsvPZwA,12030
|
|
40
|
-
umaudemc/command/graph.py,sha256=74U-yY9NEm5oTeUjspkwy6Ve_eLBTwx8LgZDzUk2LQw,6112
|
|
41
|
-
umaudemc/command/pcheck.py,sha256=RcgwQn8xBgt9eZC1sE3JzR97MB0SC6Q1AXuiKkkzJes,7274
|
|
42
|
-
umaudemc/command/scheck.py,sha256=eRGE-2SsOf6etIfJQ9dJe4cSch8qAs7IuOR94i-E1_U,4653
|
|
43
|
-
umaudemc/command/test.py,sha256=4Uw83V-gVbm21L0Zkv3mKOUpamiNM-qMxGVAYs-trdY,38734
|
|
44
|
-
umaudemc/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
|
-
umaudemc/data/opsem.maude,sha256=geDP3_RMgtS1rRmYOybJDCXn_-dyHHxg0JxfYg1ftv0,27929
|
|
46
|
-
umaudemc/data/problog.maude,sha256=qvP90peT3J9gWi7I0x86jfrEXsVxDP5lcrUnSkTMhcY,3091
|
|
47
|
-
umaudemc/data/result.htm,sha256=IwllBM3p4F-QFvOYZZR6bZicL-FuuPLainU9DUPPyNA,1766
|
|
48
|
-
umaudemc/data/select.htm,sha256=g0eXHHFxRpxJ9tqOfSgn_QmSQy0E-ET7MimBllGk6vk,4600
|
|
49
|
-
umaudemc/data/smcgraph.js,sha256=iCNQNmsuGdL_GLnqVhGDisediFtedxw3C24rxSiQwx8,6674
|
|
50
|
-
umaudemc/data/smcview.css,sha256=ExFqrMkSeaf8VxFrJXflyCsRW3FTwbv78q0Hoo2UVrM,3833
|
|
51
|
-
umaudemc/data/smcview.js,sha256=_fHum1DRU1mhco-9-c6KqTLgiC5u_cCUf61jIK7wcIQ,14509
|
|
52
|
-
umaudemc/data/templog.maude,sha256=TZ-66hVWoG6gp7gJpS6FsQn7dpBTLrr76bKo-UfHGcA,9161
|
|
53
|
-
umaudemc-0.13.1.dist-info/LICENSE,sha256=MrEGL32oSWfnAZ0Bq4BZNcqnq3Mhp87Q4w6-deXfFnA,17992
|
|
54
|
-
umaudemc-0.13.1.dist-info/METADATA,sha256=FYNu7K2Mr4bn93Y0ssvIMn7jXBcK-okaAgVKP4nlBHY,1693
|
|
55
|
-
umaudemc-0.13.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
56
|
-
umaudemc-0.13.1.dist-info/entry_points.txt,sha256=8rYRlLkn4orZtAoujDSeol1t_UFBrK0bfjmLTNv9B44,52
|
|
57
|
-
umaudemc-0.13.1.dist-info/top_level.txt,sha256=Yo_CF78HLGBSblk3890qLcx6XZ17zHCbGcT9iG8sfMw,9
|
|
58
|
-
umaudemc-0.13.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|