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/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.filename = filename
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
- ast.Load(), custom_loc=(call_line, call_column))
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.reval
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, self.lexer.LT_NUMBER):
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 = self.lexer.get_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
- if token == 'eval':
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 called are well-defined
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 line, column, expr, _ in self.queries:
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
- return QuaTExParser(input_file, filename=filename).parse()
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 in 3.7 and its backport
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
- # To avoid deprecation warnings in Python 3.11 and above
16
- if sys.version_info >= (3, 9):
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
- def get_resource_binary(name):
27
- """Get the string content of a given named resource"""
28
- return (pkg_resources.files(data) / name).read_bytes()
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
@@ -218,7 +218,7 @@ class StrategyDTMCSimulator(BaseSimulator):
218
218
  p = sc.compile(ml.upStrategy(strategy))
219
219
 
220
220
  try:
221
- self.graph = MarkovRunner(p, initial).run()
221
+ self.graph, _ = MarkovRunner(p, initial).run()
222
222
  self.node = self.graph
223
223
  self.time = 0.0
224
224
 
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 k, query in enumerate(qdata):
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.randint(0, 1e6) for _ in range(jobs)]
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[2])]
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
- """Persisent server information"""
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
1
+ Metadata-Version: 2.4
2
2
  Name: umaudemc
3
- Version: 0.13.1
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: GPLv3
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.7
15
+ Requires-Python: >=3.9
17
16
  Description-Content-Type: text/markdown
18
17
  License-File: LICENSE
19
- Requires-Dist: maude >=1.0
18
+ Requires-Dist: maude>=1.0
20
19
  Provides-Extra: ctlstar
21
- Requires-Dist: pyModelChecking >=1.3.3 ; extra == 'ctlstar'
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 ; extra == 'plot'
24
+ Requires-Dist: matplotlib; extra == "plot"
24
25
  Provides-Extra: smc
25
- Requires-Dist: scipy ; extra == 'smc'
26
- Provides-Extra: yaml
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -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,,