abstract-math 0.0.0.1__py3-none-any.whl → 0.0.0.3__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.

Potentially problematic release.


This version of abstract-math might be problematic. Click here for more details.

abstract_math/__init__.py CHANGED
@@ -1 +1,2 @@
1
- from .safe_math impoort *
1
+ from .safe_math import *
2
+ from .derive_tokens import *
@@ -0,0 +1,97 @@
1
+ from decimal import Decimal, getcontext
2
+ from .safe_math import *
3
+ getcontext().prec = 50 # High precision for accuracy
4
+ SOL_DECIMAL_PLACE = 9
5
+ SOL_LAMPORTS = sol_lamports =int(exponential(1,exp=SOL_DECIMAL_PLACE,num=1))
6
+ def get_proper_args(strings,*args,**kwargs):
7
+ properArgs = []
8
+ for key in strings:
9
+ kwarg = kwargs.get(key)
10
+ if kwarg == None and args:
11
+ kwarg = args[0]
12
+ args = [] if len(args) == 1 else args[1:]
13
+ properArgs.append(kwarg)
14
+ return properArgs
15
+
16
+ #lamports
17
+ def get_lamports(integer):
18
+ return exp_it(10,len(str(integer))+1,1)
19
+ def get_lamport_difference(lamports,virtual_lamports):
20
+ integer = int(virtual_lamports/lamports)
21
+ exponential = len(str(integer))
22
+ return int(exponential(1,exp=exponential,num=1))
23
+ #virtual reserves
24
+ def get_vitual_reserves(*args,**kwargs):
25
+ proper_args = get_proper_args(["virtualSolReserves","virtualTokenReserves"],*args,**kwargs)
26
+ return proper_args
27
+ def get_virtual_reserve_ratio(*ars,**kwargs):
28
+ proper_args = get_vitual_reserves(*args,**kwargs)
29
+ return divide_it(*proper_args)
30
+ #sol reserves
31
+ def get_virtual_sol_reservs(*args,**kwargs):
32
+ proper_args = get_proper_args(["virtualSolReserves"],*args,**kwargs)
33
+ return proper_args[0] if proper_args else proper_args
34
+ def get_virtual_sol_lamports(*args,**kwargs):
35
+ virtual_sol_reserves = get_virtual_sol_reservs(*args,**kwargs)
36
+ virtual_sol_lamports = get_lamports(virtual_sol_reserves)
37
+ return virtual_sol_lamports
38
+ def get_virtual_sol_lamp_difference(*args,**kwargs):
39
+ virtual_sol_lamports = get_virtual_sol_lamports(*args,**kwargs)
40
+ return get_lamport_difference(SOL_LAMPORTS,virtual_sol_lamports)
41
+ #sol Amount
42
+ def get_sol_amount(*args,**kwargs):
43
+ proper_args = get_proper_args(["solAmount"],*args,**kwargs)
44
+ return proper_args[0] if proper_args else proper_args
45
+ def getSolAmountUi(*args,**kwargs):
46
+ sol_amount = get_sol_amount(*args,**kwargs)
47
+ return exponential(sol_amount,SOL_DECIMAL_PLACE)
48
+ #token reserves
49
+ def get_virtual_token_reservs(*args,**kwargs):
50
+ proper_args = get_proper_args(["virtualTokenReserves"],*args,**kwargs)
51
+ return proper_args[0] if proper_args else proper_args
52
+ def get_virtual_token_lamports(*args,**kwargs):
53
+ virtual_token_reserves = get_virtual_token_reservs(*args,**kwargs)
54
+ virtual_token_lamports = get_lamports(virtual_token_reserves)
55
+ return virtual_token_lamports
56
+ #token amount
57
+ def get_token_amount(*args,**kwargs):
58
+ proper_args = get_proper_args(["tokenAmount"],*args,**kwargs)
59
+ return proper_args[0] if proper_args else proper_args
60
+ def get_token_amount_ui(*args,**kwargs):
61
+ token_amount = get_token_amount(*args,**kwargs)
62
+ token_decimals = derive_token_decimals(*args,**kwargs)
63
+ return exponential(token_amount,exp=token_decimals)
64
+ #token derivision
65
+ def derive_token_decimals_from_token_variables(variables):
66
+ variables["price"] = get_price(**variables)
67
+ variables["tokenDecimals"] = derive_decimals_from_vars(*args,**kwargs)
68
+ return variables
69
+ def get_derived_token_ratio(*args,**kwarg):
70
+ derived_token_amount = derive_token_amount(*args,**kwargs)
71
+ token_amount = get_token_amount(*args,**kwargs)
72
+ ratio = divide_it(derived_token_amount,token_amount)
73
+ return ratio
74
+ def derive_token_amount(*args,**kwargs):
75
+ virtual_token_reserves = get_virtual_token_reserves(*args,**kwargs)
76
+ price = get_price(*args,**kwargs)
77
+ derived_token_amount = divide_it(virtual_token_reserves,price)
78
+ return derived_token_amount
79
+ #derive variables
80
+ def get_price(*args,**kwargs):
81
+ reserve_ratios = get_virtual_reserve_ratio(*ars,**kwargs)
82
+ virtual_sol_lamp_difference = get_virtual_sol_lamp_difference(*args,**kwargs)
83
+ return reserve_ratios/virtual_sol_lamp_difference
84
+ def derive_decimals_from_vars(*args,**kwargs):
85
+ ratio = get_derived_token_ratio(*args,**kwarg)
86
+ decimals = -1
87
+ while abs(ratio - round(ratio)) > 1e-9:
88
+ ratio *= 10
89
+ decimals += 1
90
+ return decimals
91
+ def update_token_variables(variables):
92
+ variables['solAmountUi'] = getSolAmountUi(**variables)
93
+ variables['solDecimals'] = 9
94
+ variables = derive_token_decimals_from_token_variables(variables)
95
+ variables['tokenAmountUi'] = exponential(variables['tokenAmount'],variables["tokenDecimals"])
96
+ return variables
97
+
@@ -1,3 +1,176 @@
1
+ #abstract_bots.py
2
+ import os
3
+ import re
4
+ import json
5
+ import shutil
6
+ import logging
7
+ logging.basicConfig(level=logging.INFO)
8
+ logging.basicConfig(level=logging.DEBUG,format='%(asctime)s - %(levelname)s - %(message)s')
9
+ logger = logging.getLogger(__name__)
10
+ from abstract_utilities import (safe_dump_to_file,
11
+ safe_read_from_json,
12
+ get_any_value,
13
+ make_list,
14
+ eatAll)
15
+ #json functions-----------------------------------------------------------------------------------------------------------------------------------------
16
+ def safe_json_loads(data):
17
+ if not isinstance(data, (dict, str)):
18
+ data = str(data)
19
+ if not isinstance(data, dict):
20
+ try:
21
+ data = json.loads(data)
22
+ except json.JSONDecodeError:
23
+ logger.error("Error parsing data with json, data might not be in correct format.")
24
+ data = None
25
+ return data
26
+
27
+ def load_json_data(file_path):
28
+ try:
29
+ with file_path.open('r') as file:
30
+ return json.load(file)
31
+ except json.JSONDecodeError as e:
32
+ logger.error(f"Error reading JSON file: {e}")
33
+ return None
34
+
35
+ def safe_list(obj,keys):
36
+ keys = make_list(keys)
37
+ for key in keys:
38
+ if obj and isinstance(obj,list) and is_number(key) and len(obj)>key:
39
+ obj = obj[int(key)]
40
+ else:
41
+ return obj
42
+ return obj
43
+
44
+ def safe_get(obj,keys):
45
+ keys = make_list(keys)
46
+ new_obj = obj
47
+ for i,key in enumerate(keys):
48
+ if isinstance(new_obj,dict):
49
+ new_obj = new_obj.get(key,None if len(keys)-1 == i else {})
50
+ elif isinstance(new_obj,list):
51
+ new_obj = safe_list(new_obj,key)
52
+ else:
53
+ return new_obj
54
+ return new_obj
55
+
56
+ def get_all_keys(dict_data,keys=[]):
57
+ if isinstance(dict_data,dict):
58
+ for key,value in dict_data.items():
59
+ keys.append(key)
60
+ keys = get_all_keys(value,keys=keys)
61
+ return keys
62
+ #address sanitation-----------------------------------------------------------------------------------------------
63
+ def get_data(file_path):
64
+ if os.path.isfile(file_path):
65
+ return safe_read_from_json(file_path)
66
+
67
+ #directory functions --------------------------------------------------------------------------------------------
68
+ def move_file(src_path,dst_file_path):
69
+ shutil.move(str(src_path), str(dst_file_path))
70
+ logger.info(f"Moved {src_path.name} to errored messages directory.")
71
+
72
+ def secure_delete(file_path):
73
+ try:
74
+ if os.path.exists(file_path):
75
+ os.remove(file_path)
76
+ logger.info(f"File {file_path} has been deleted.")
77
+ else:
78
+ logger.warning(f"File {file_path} does not exist.")
79
+ except OSError as e:
80
+ logger.error(f"Error deleting file {file_path}: {e.strerror}")
81
+
82
+ def make_directory(file_path):
83
+ os.makedirs(file_path, exist_ok=True)
84
+ return file_path
85
+
86
+ def get_create_data(file_path,data={}):
87
+ if not os.path.isfile(file_path):
88
+ safe_dump_to_file(data=data,file_path=file_path)
89
+ return safe_read_from_json(file_path)
90
+
91
+ #type functions --------------------------------------------------------------------------------------------------
92
+ def get_args_send_args(function, *args):
93
+ if not args:
94
+ return args
95
+ input_type = type(args[0])
96
+ flattened_args = []
97
+ for arg in args:
98
+ if isinstance(arg, (list, set, tuple)):
99
+ flattened_args.extend(arg)
100
+ else:
101
+ flattened_args.append(arg)
102
+ processed_items = [function(item) for item in flattened_args]
103
+ if input_type is list:
104
+ return processed_items
105
+ elif input_type is set:
106
+ return set(processed_items)
107
+ elif input_type is tuple:
108
+ return tuple(processed_items)
109
+ else:
110
+ # Assuming if_single_obj is a function that handles single objects
111
+ return if_single_obj(processed_items)
112
+
113
+ def list_set(obj):
114
+ obj = obj or []
115
+ return list(set(obj))
116
+
117
+ def get_symetric_difference(obj_1,obj_2):
118
+ set1 = set(obj_1)
119
+ set2 = set(obj_2)
120
+ # Find elements that are unique to each list
121
+ unique_elements = set1.symmetric_difference(set2)
122
+ # Convert the set back to a list, if needed
123
+ return list(unique_elements)
124
+
125
+ def if_single_obj(list_obj):
126
+ if list_obj and isinstance(list_obj,list) and len(list_obj)==1:
127
+ list_obj = list_obj[0]
128
+ return list_obj
129
+
130
+ def list_set(obj):
131
+ try:
132
+ obj = list(set(obj))
133
+ except Exception as e:
134
+ print(f"{e}")
135
+ return obj
136
+
137
+ def str_lower(obj):
138
+ try:
139
+ obj=str(obj).lower()
140
+ except Exception as e:
141
+ print(f"{e}")
142
+ return obj
143
+
144
+ def is_number(obj):
145
+ try:
146
+ float(obj)
147
+ return True
148
+ except (ValueError, TypeError):
149
+ return False
150
+ #address functions-------------------------------------------------------------------------------------------------
151
+ def normalize_address(address):
152
+ address =str(address).lower()
153
+ if address.startswith('0x'):
154
+ address = address[2:]
155
+ return address
156
+
157
+ def normalize_all_addresses(*args):
158
+ return get_args_send_args(normalize_address,*args)
159
+
160
+ def serialize_all_addresses(*args):
161
+ return get_args_send_args(check_and_reserialize_solana_address, *args)
162
+
163
+ def make_directory(data_path):
164
+ os.makedirs(data_path, exist_ok=True)
165
+ return data_path
166
+
167
+ def get_amount_dict(amount,decimals=9):
168
+ if amount!= None:
169
+ if isinstance(amount,dict):
170
+ amount_dict = get_any_value(amount,'uiTokenAmount')
171
+ amount = get_any_value(amount_dict,'amount')
172
+ decimals = get_any_value(amount_dict,'decimals')
173
+ return exponential(amount,decimals,-1)
1
174
  #math functions ------------------------------------------------------------------------------------------------------
2
175
  def exponential(value,exp=9,num=-1):
3
176
  return multiply_it(value,exp_it(10,exp,num))
@@ -31,3 +204,6 @@ def get_percentage(owner_balance,address_balance):
31
204
  retained_div = divide_it(owner_balance,address_balance)
32
205
  retained_mul = multiply_it(retained_div,100)
33
206
  return round(retained_mul,2)
207
+
208
+
209
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: abstract_math
3
- Version: 0.0.0.1
3
+ Version: 0.0.0.3
4
4
  Author: putkoff
5
5
  Author-email: partners@abstractendeavors.com
6
6
  Classifier: Development Status :: 3 - Alpha
@@ -0,0 +1,7 @@
1
+ abstract_math/__init__.py,sha256=3I0YJakDUyWD7qXpdRsaEsmcA7IxwcWhoyecvDfOE98,54
2
+ abstract_math/deriveit.py,sha256=Og8QtDGRrgGbmaHTh-jEusg35jUpb74DgzslsxZ_2iU,4271
3
+ abstract_math/safe_math.py,sha256=CP05f3-SHQ3aJu1bO1IJGQ7HYOwpqonMVb0kN3gBbEU,6838
4
+ abstract_math-0.0.0.3.dist-info/METADATA,sha256=jO07_wMODpJSmnZK_HW2mbr0V9K2RuW-tC_8d2YPAa8,579
5
+ abstract_math-0.0.0.3.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
6
+ abstract_math-0.0.0.3.dist-info/top_level.txt,sha256=b7jOgD9c0U-CGH-l7yxhMPukzD40kMEQkQRV_sGyVfE,14
7
+ abstract_math-0.0.0.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (74.0.0)
2
+ Generator: setuptools (75.6.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,6 +0,0 @@
1
- abstract_math/__init__.py,sha256=8CLNPZ2XN-wrwnkGu9WmKgegmjiBTK8WmSrwde3Toc8,26
2
- abstract_math/safe_math.py,sha256=9BJ4iNP5IseAbCrOpd1tcKMu0S0wZINbVD-zllZfMyg,1160
3
- abstract_math-0.0.0.1.dist-info/METADATA,sha256=OdxsTetffxJsR5ZRo4b7s0OnIFROWzt0PkswTjWptcQ,579
4
- abstract_math-0.0.0.1.dist-info/WHEEL,sha256=UvcQYKBHoFqaQd6LKyqHw9fxEolWLQnlzP0h_LgJAfI,91
5
- abstract_math-0.0.0.1.dist-info/top_level.txt,sha256=b7jOgD9c0U-CGH-l7yxhMPukzD40kMEQkQRV_sGyVfE,14
6
- abstract_math-0.0.0.1.dist-info/RECORD,,