mathjson-solver 1.9.1__tar.gz → 1.10.0__tar.gz

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.
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: mathjson-solver
3
- Version: 1.9.1
3
+ Version: 1.10.0
4
4
  Summary: Utilities for MathJSON evaluation
5
5
  Home-page: https://github.com/LongenesisLtd/mathjson-solver
6
6
  Author: Martins Mednis
@@ -12,6 +12,15 @@ Classifier: Operating System :: OS Independent
12
12
  Requires-Python: >=3.6
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
+ Dynamic: author
16
+ Dynamic: author-email
17
+ Dynamic: classifier
18
+ Dynamic: description
19
+ Dynamic: description-content-type
20
+ Dynamic: home-page
21
+ Dynamic: project-url
22
+ Dynamic: requires-python
23
+ Dynamic: summary
15
24
 
16
25
  # MathJSON Solver
17
26
 
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = mathjson-solver
3
- version = 1.9.1
3
+ version = 1.10.0
4
4
  author = Martins Mednis
5
5
  author_email = mrt@mednis.info
6
6
  description = Utilities for MathJSON evaluation
@@ -5,7 +5,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
5
5
 
6
6
  setuptools.setup(
7
7
  name="mathjson-solver",
8
- version="1.9.1",
8
+ version="1.10.0",
9
9
  author="Martins Mednis",
10
10
  author_email="mrt@mednis.info",
11
11
  description="Utilities for MathJSON evaluation",
@@ -6,6 +6,7 @@ from copy import deepcopy
6
6
  from statistics import median
7
7
  import logging
8
8
  import traceback
9
+ import datetime
9
10
 
10
11
 
11
12
  class MathJSONException(Exception):
@@ -141,6 +142,31 @@ def create_mathjson_solver(solver_parameters):
141
142
  def Arr(s):
142
143
  return s
143
144
 
145
+ def Add(s):
146
+ l_res = []
147
+ tmp = 0
148
+ for i, x in enumerate(s[1:]):
149
+ res = f(x, c)
150
+ if i ==0:
151
+ tmp = res
152
+ else:
153
+ tmp = tmp + res
154
+
155
+ # if isinstance(res, list):
156
+ # l_res.append(sum([xx for xx in res[1:]]))
157
+ # else:
158
+ # l_res.append(res)
159
+
160
+ return tmp
161
+
162
+ # tmp = 0
163
+ # for i, x in enumerate(l):
164
+ # if i == 0:
165
+ # tmp = x
166
+ # else:
167
+ # tmp = tmp + x
168
+ # return tmp
169
+
144
170
  def Sum(s):
145
171
  l_res = []
146
172
  for x in s[1:]:
@@ -343,9 +369,37 @@ def create_mathjson_solver(solver_parameters):
343
369
  conditions=conditions,
344
370
  )
345
371
 
372
+ def Strptime(s):
373
+ datetime_str = f(s[1], c)
374
+ parameters = f(s[2], c)
375
+ return datetime.datetime.strptime(datetime_str, parameters)
376
+
377
+ def Strftime(s):
378
+ dt = f(s[1], c)
379
+ parameters = f(s[2], c)
380
+ return dt.strftime(parameters)
381
+
382
+ def Now(s):
383
+ return datetime.datetime.now()
384
+
385
+ def Today(s):
386
+ return datetime.date.today()
387
+
388
+ def TimeDeltaDays(s):
389
+ return datetime.timedelta(days=f(s[1], c))
390
+
391
+ def TimeDeltaMinutes(s):
392
+ return datetime.timedelta(minutes=f(s[1], c))
393
+
394
+ def TimeDeltaHours(s):
395
+ return datetime.timedelta(hours=f(s[1], c))
396
+
397
+ def TimeDeltaWeeks(s):
398
+ return datetime.timedelta(weeks=f(s[1], c))
399
+
346
400
  constructs = {
347
401
  "Sum": Sum,
348
- "Add": Sum,
402
+ "Add": Add,
349
403
  "Subtract": lambda s: reduce(
350
404
  lambda a, b: a - b, [f(x, c) for x in s[1:]]
351
405
  ),
@@ -401,6 +455,14 @@ def create_mathjson_solver(solver_parameters):
401
455
  "IsDefined": lambda s: s[1] in c,
402
456
  "Map": Map,
403
457
  "HasMatchingSublist": HasMatchingSublist,
458
+ "Strptime": Strptime,
459
+ "Strftime": Strftime,
460
+ "Today": Today,
461
+ "Now": Now,
462
+ "TimeDeltaWeeks": TimeDeltaWeeks,
463
+ "TimeDeltaHours": TimeDeltaHours,
464
+ "TimeDeltaMinutes": TimeDeltaMinutes,
465
+ "TimeDeltaDays": TimeDeltaDays,
404
466
  }
405
467
  if s[0] in constructs:
406
468
  try:
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: mathjson-solver
3
- Version: 1.9.1
3
+ Version: 1.10.0
4
4
  Summary: Utilities for MathJSON evaluation
5
5
  Home-page: https://github.com/LongenesisLtd/mathjson-solver
6
6
  Author: Martins Mednis
@@ -12,6 +12,15 @@ Classifier: Operating System :: OS Independent
12
12
  Requires-Python: >=3.6
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
+ Dynamic: author
16
+ Dynamic: author-email
17
+ Dynamic: classifier
18
+ Dynamic: description
19
+ Dynamic: description-content-type
20
+ Dynamic: home-page
21
+ Dynamic: project-url
22
+ Dynamic: requires-python
23
+ Dynamic: summary
15
24
 
16
25
  # MathJSON Solver
17
26
 
@@ -259,6 +259,13 @@ from mathjson_solver import create_solver, MathJSONException, extract_variables
259
259
  ],
260
260
  False,
261
261
  ),
262
+ ({}, ["Strftime", ["Strptime", "2025-01-10T10:05", "%Y-%m-%dT%H:%M"], "%Y"], "2025"),
263
+ ({}, ["Strftime", ["Today"], "%Y"], "2025"),
264
+ ({}, ["Strftime", ["Now"], "%Y"], "2025"),
265
+ ({}, ["Strftime", ["Add", ["Strptime", "2025-01-10T10:05", "%Y-%m-%dT%H:%M"], ["TimeDeltaDays", 3]], "%d"], "13"),
266
+ ({}, ["Strftime", ["Add", ["Strptime", "2025-01-10T10:05", "%Y-%m-%dT%H:%M"], ["TimeDeltaMinutes", 5]], "%M"], "10"),
267
+ ({}, ["Strftime", ["Add", ["Strptime", "2025-01-10T10:05", "%Y-%m-%dT%H:%M"], ["TimeDeltaHours", 2]], "%H"], "12"),
268
+ ({}, ["Strftime", ["Add", ["Strptime", "2025-01-10T10:05", "%Y-%m-%dT%H:%M"], ["TimeDeltaWeeks", 1]], "%d"], "17"),
262
269
  ],
263
270
  )
264
271
  def test_solver_simple(parameters, expression, expected_result):