danielutils 0.9.82__tar.gz → 0.9.83__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.
- {danielutils-0.9.82/danielutils.egg-info → danielutils-0.9.83}/PKG-INFO +2 -2
- {danielutils-0.9.82 → danielutils-0.9.83}/README.md +1 -1
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/__init__.py +1 -2
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/functions/__init__.py +1 -0
- danielutils-0.9.83/danielutils/functions/parallel_for.py +37 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/math_/__init__.py +0 -1
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/print_.py +51 -15
- danielutils-0.9.83/danielutils/progress_bar/__init__.py +3 -0
- danielutils-0.9.83/danielutils/progress_bar/ascii_progress_bar.py +104 -0
- danielutils-0.9.83/danielutils/progress_bar/progress_bar.py +54 -0
- danielutils-0.9.82/danielutils/tqdm_.py → danielutils-0.9.83/danielutils/progress_bar/progress_bar_pool.py +19 -24
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/system/layered_command.py +14 -6
- {danielutils-0.9.82 → danielutils-0.9.83/danielutils.egg-info}/PKG-INFO +2 -2
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils.egg-info/SOURCES.txt +5 -3
- {danielutils-0.9.82 → danielutils-0.9.83}/pyproject.toml +1 -1
- danielutils-0.9.82/danielutils/math_/polynomial/__init__.py +0 -1
- danielutils-0.9.82/danielutils/math_/polynomial/polinomial.py +0 -33
- {danielutils-0.9.82 → danielutils-0.9.83}/LICENSE +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/MANIFEST.in +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/abstractions/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/abstractions/database/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/abstractions/database/cached_database.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/abstractions/database/database.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/abstractions/database/redis_database.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/abstractions/multiprogramming/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/abstractions/multiprogramming/multi_id.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/abstractions/multiprogramming/worker.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/abstractions/multiprogramming/worker_pool.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/abstractions/repl.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/aliases.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/better_builtins/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/better_builtins/counter.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/better_builtins/frange.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/better_builtins/typed_builtins/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/better_builtins/typed_builtins/factory.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/better_builtins/typed_builtins/tdict.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/better_builtins/typed_builtins/tlist.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/better_builtins/typed_builtins/tset.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/better_builtins/typed_builtins/ttuple.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/colors.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/context_managers/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/context_managers/attr_context.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/context_managers/temporary_file.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/convenience.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/conversions/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/conversions/main_conversions.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/conversions/specialized_conversions/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/conversions/specialized_conversions/to_hex.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/conversions/specialized_conversions/to_int.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/comparer.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/default_dict.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/functions.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/graph/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/graph/binary_node.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/graph/graph.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/graph/multinode.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/graph/node.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/heap/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/heap/heap.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/heap/max_heap.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/heap/min_heap.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/queue/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/queue/atomic_queue.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/queue/priority_queue.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/queue/queue.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/stack.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/trees/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/trees/binary_syntax_tree.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/data_structures/trees/binary_tree.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/date.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/date_time.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/decorators/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/decorators/atomic.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/decorators/attach.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/decorators/chain_decorators.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/decorators/decorate_conditionally.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/decorators/delay_call.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/decorators/deprecate.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/decorators/final.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/decorators/limit_recursion.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/decorators/memo.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/decorators/overload.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/decorators/partially_implemented.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/decorators/processify.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/decorators/property.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/decorators/singleton.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/decorators/threadify.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/decorators/timeout.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/decorators/total_ordering.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/decorators/validate.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/exceptions.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/functions/areoneof.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/functions/check_foreach.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/functions/flatten.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/functions/isoftype.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/functions/isoneof.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/functions/multiloop.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/functions/powerset.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/functions/subseteq.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/functions/types_subseteq.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/generators/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/generators/conditional_generator.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/generators/generator_from_stream.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/generators/join_generators.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/internet.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/io_.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/math_/constants.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/math_/functions.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/math_/math_print.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/math_/math_symbols.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/metaclasses/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/metaclasses/atomic_class_meta.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/metaclasses/implicit_data_deleter_meta.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/metaclasses/instance_cache_meta.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/metaclasses/interface.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/metaclasses/overload_meta.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/mock_/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/mock_/mock_database.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/mock_/mock_module.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/path.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/protocols/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/protocols/dictable.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/protocols/evaluable.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/py.typed +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/reflection/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/reflection/class_/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/reflection/class_/class_reflection.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/reflection/file/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/reflection/file/file_reflection.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/reflection/function/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/reflection/function/function_reflections.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/reflection/interpreter/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/reflection/interpreter/callstack.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/reflection/interpreter/get_traceback.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/reflection/interpreter/os_.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/reflection/interpreter/packages.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/reflection/interpreter/python_version.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/reflection/interpreter/signals.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/reflection/interpreter/tracer.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/reflection/module/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/reflection/module/module_reflections.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/reflection/module/package_reflection.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/snippets/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/snippets/try_get.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/system/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/system/independent.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/system/windows/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/system/windows/utils/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/system/windows/utils/filetime.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/system/windows/win32_ctime.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/system/windows/windows.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/text.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/time.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/databases/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/databases/all.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/oop/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/oop/observer.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/oop/strategy.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/conditional_variable/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/conditional_variable/conditional_variable.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/conditional_variable/continuous/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/conditional_variable/discrete/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/conditional_variable/discrete/bernoulli.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/conditional_variable/discrete/binomial.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/conditional_variable/discrete/conditional_from_discrete_probability_func.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/conditional_variable/discrete/discrete.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/conditional_variable/discrete/geometric.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/conditional_variable/discrete/poisson.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/conditional_variable/discrete/uniform.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/distributions.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/expressions/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/expressions/accumulation_expression.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/expressions/probability_expression.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/funcs/__init__.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/funcs/covariance.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/funcs/expected_value.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/funcs/probability_function.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/funcs/variance.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/operator.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/protocols.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/supp.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/university/probability/transformation.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils/versioned_imports.py +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils.egg-info/dependency_links.txt +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/danielutils.egg-info/top_level.txt +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/setup.cfg +0 -0
- {danielutils-0.9.82 → danielutils-0.9.83}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: danielutils
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.83
|
|
4
4
|
Summary: A python utils library for things I find useful
|
|
5
5
|
Author-email: danielnachumdev <danielnachumdev@gmail.com>
|
|
6
6
|
License: MIT License
|
|
@@ -41,7 +41,7 @@ License-File: LICENSE
|
|
|
41
41
|
[](https://www.python.org/downloads/release/python-31011/)
|
|
42
42
|
[](https://github.com/danielnachumdev/danielutils/actions/workflows/gitleaks.yml)
|
|
43
43
|
[](https://github.com/danielnachumdev/danielutils/actions/workflows/github-code-scanning/codeql)
|
|
44
|
-
# danielutils v=0.9.
|
|
44
|
+
# danielutils v=0.9.83
|
|
45
45
|
A utils library for things that I find useful for my coding workflow.\
|
|
46
46
|
Feel free to use and / or contribute / improve my code :)
|
|
47
47
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://www.python.org/downloads/release/python-31011/)
|
|
5
5
|
[](https://github.com/danielnachumdev/danielutils/actions/workflows/gitleaks.yml)
|
|
6
6
|
[](https://github.com/danielnachumdev/danielutils/actions/workflows/github-code-scanning/codeql)
|
|
7
|
-
# danielutils v=0.9.
|
|
7
|
+
# danielutils v=0.9.83
|
|
8
8
|
A utils library for things that I find useful for my coding workflow.\
|
|
9
9
|
Feel free to use and / or contribute / improve my code :)
|
|
10
10
|
|
|
@@ -17,9 +17,8 @@ from .protocols import *
|
|
|
17
17
|
|
|
18
18
|
from .reflection import *
|
|
19
19
|
from .decorators import *
|
|
20
|
-
|
|
21
20
|
# ========== NEEDS REFLECTION ==========
|
|
22
|
-
from .
|
|
21
|
+
from .progress_bar import *
|
|
23
22
|
# ========== NEEDS DECORATORS ==========
|
|
24
23
|
from .colors import *
|
|
25
24
|
# ========== NEEDS BOTH ==========
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import threading
|
|
2
|
+
from typing import TypeVar, Callable
|
|
3
|
+
|
|
4
|
+
T = TypeVar("T")
|
|
5
|
+
Consumer = Callable[[T], None]
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def parallel_for(func: Consumer[T], *args: T, wait: bool = True) -> None:
|
|
9
|
+
"""
|
|
10
|
+
This function will run 'func' in parallel with the given args individually
|
|
11
|
+
Args:
|
|
12
|
+
func: function to run in parallel
|
|
13
|
+
*args: args to call the function each time
|
|
14
|
+
wait: whether to wait for all the threads to join before returning
|
|
15
|
+
|
|
16
|
+
Returns:
|
|
17
|
+
|
|
18
|
+
"""
|
|
19
|
+
# this is safer... What if some other threads that were running will also end in the meantime?
|
|
20
|
+
threads = [threading.Thread(target=func, args=[arg]) for arg in args]
|
|
21
|
+
for t in threads:
|
|
22
|
+
t.start()
|
|
23
|
+
if wait:
|
|
24
|
+
for t in threads:
|
|
25
|
+
t.join()
|
|
26
|
+
# before = threading.active_count()
|
|
27
|
+
# for arg in args:
|
|
28
|
+
# threadify(func)(arg)
|
|
29
|
+
#
|
|
30
|
+
# if wait:
|
|
31
|
+
# while threading.active_count() > before:
|
|
32
|
+
# pass
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
__all__ = [
|
|
36
|
+
'parallel_for'
|
|
37
|
+
]
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import sys
|
|
2
|
+
from typing import IO
|
|
2
3
|
from .functions.areoneof import areoneof
|
|
3
4
|
from .math_.math_print import mprint_parse_one
|
|
4
5
|
from .decorators import atomic, deprecate
|
|
6
|
+
from .colors import warning
|
|
5
7
|
|
|
6
8
|
|
|
7
9
|
def mprint(*args, sep: str = " ", end: str = "\n", stream=sys.stdout) -> None:
|
|
@@ -21,7 +23,7 @@ def mprint(*args, sep: str = " ", end: str = "\n", stream=sys.stdout) -> None:
|
|
|
21
23
|
"""
|
|
22
24
|
if not areoneof(args, [str]):
|
|
23
25
|
raise TypeError("s must be a string")
|
|
24
|
-
stream.write(sep.join([mprint_parse_one(s) for s in args])+end)
|
|
26
|
+
stream.write(sep.join([mprint_parse_one(s) for s in args]) + end)
|
|
25
27
|
|
|
26
28
|
|
|
27
29
|
@deprecate("The built-in 'print' function has an argument called 'file', use this instead")
|
|
@@ -37,7 +39,7 @@ def sprint(*args, sep: str = " ", end: str = "\n", stream=sys.stdout) -> None:
|
|
|
37
39
|
Returns:
|
|
38
40
|
None
|
|
39
41
|
"""
|
|
40
|
-
stream.write(sep.join(args)+end)
|
|
42
|
+
stream.write(sep.join(args) + end)
|
|
41
43
|
|
|
42
44
|
|
|
43
45
|
@atomic
|
|
@@ -55,25 +57,59 @@ def aprint(*args, sep=" ", end="\n") -> None:
|
|
|
55
57
|
print(*args, sep=sep, end=end)
|
|
56
58
|
|
|
57
59
|
|
|
58
|
-
|
|
59
|
-
def
|
|
60
|
-
|
|
60
|
+
class BetterPrinter:
|
|
61
|
+
def __init__(self, thread_safe: bool = False):
|
|
62
|
+
if thread_safe:
|
|
63
|
+
self.__call__ = atomic(self.__call__)
|
|
64
|
+
self._current_row: int = 0
|
|
65
|
+
self.rows: list[str] = []
|
|
61
66
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
+
def clear(self, stream: IO = sys.stdout, flush: bool = True) -> None:
|
|
68
|
+
if not stream.isatty():
|
|
69
|
+
warning(f"Cannot clear because {stream} is not a terminal stream")
|
|
70
|
+
return
|
|
71
|
+
self.write("\033[2J", stream=stream, flush=flush)
|
|
72
|
+
self.rows.pop()
|
|
73
|
+
|
|
74
|
+
def clear_line(self) -> None:
|
|
75
|
+
self.write("\033[2K", end="")
|
|
76
|
+
self.rows.pop()
|
|
77
|
+
|
|
78
|
+
def move_up(self, num_lines: int = 1) -> None:
|
|
79
|
+
self.write(f"\033[{num_lines}A", end="")
|
|
80
|
+
self.rows.pop()
|
|
81
|
+
self._current_row -= 1
|
|
82
|
+
|
|
83
|
+
def write(self, *args, sep: str = " ", end: str = "\n", stream: IO = sys.stdout, flush: bool = True):
|
|
84
|
+
text = sep.join(args) + end
|
|
85
|
+
self._current_row += text.count("\n")
|
|
86
|
+
self.rows.extend([f"{s}\n" for s in text.splitlines() if len(s) > 0])
|
|
87
|
+
stream.write(text)
|
|
88
|
+
if flush:
|
|
89
|
+
stream.flush()
|
|
90
|
+
|
|
91
|
+
def __call__(self, *args, **kwargs) -> None:
|
|
92
|
+
self.write(*args, **kwargs)
|
|
93
|
+
|
|
94
|
+
@property
|
|
95
|
+
def current_row(self) -> int:
|
|
96
|
+
return self._current_row
|
|
97
|
+
|
|
98
|
+
def insert(self, text: str, row: int) -> None:
|
|
99
|
+
self.rows.insert(row, text)
|
|
100
|
+
num_rows = len(self.rows)
|
|
101
|
+
self.clear()
|
|
102
|
+
self.write(*self.rows)
|
|
103
|
+
for _ in range(num_rows):
|
|
104
|
+
self.rows.pop()
|
|
67
105
|
|
|
68
|
-
Returns:
|
|
69
|
-
None
|
|
70
|
-
"""
|
|
71
|
-
stream.write(sep.join(args)+end)
|
|
72
106
|
|
|
107
|
+
bprint = BetterPrinter()
|
|
73
108
|
|
|
74
109
|
__all__ = [
|
|
75
110
|
"sprint",
|
|
76
111
|
"mprint",
|
|
77
112
|
"aprint",
|
|
78
|
-
"bprint"
|
|
113
|
+
"bprint",
|
|
114
|
+
'BetterPrinter'
|
|
79
115
|
]
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import time
|
|
2
|
+
from typing import Optional, Iterable, Sized
|
|
3
|
+
|
|
4
|
+
from .progress_bar import ProgressBar
|
|
5
|
+
from ..print_ import bprint
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class AsciiProgressBar(ProgressBar):
|
|
9
|
+
|
|
10
|
+
def __init__(
|
|
11
|
+
self,
|
|
12
|
+
iterable: Iterable,
|
|
13
|
+
position: int,
|
|
14
|
+
*,
|
|
15
|
+
total: Optional[float] = None,
|
|
16
|
+
desc: str = "",
|
|
17
|
+
leave: bool = True,
|
|
18
|
+
num_bars: int = 1,
|
|
19
|
+
ncols: int = 50,
|
|
20
|
+
**kwargs
|
|
21
|
+
):
|
|
22
|
+
self.iterable: Iterable = iterable
|
|
23
|
+
if isinstance(self.iterable, Sized):
|
|
24
|
+
total_ = len(self.iterable)
|
|
25
|
+
if total is not None:
|
|
26
|
+
total_ = total
|
|
27
|
+
ProgressBar.__init__(self, total_, position)
|
|
28
|
+
self.num_bars: int = num_bars
|
|
29
|
+
self.leave: bool = leave
|
|
30
|
+
self.desc: str = desc
|
|
31
|
+
self.initial_value: float = 0
|
|
32
|
+
self.current_value: float = 0
|
|
33
|
+
self.ncols: int = ncols
|
|
34
|
+
self.unit: str = "it"
|
|
35
|
+
self.pbar_format = "{l_bar} |{bar}| {n_fmt:.2f}/{total_fmt:.2f}{unit}" \
|
|
36
|
+
" [{elapsed:.2f}<{remaining}, {rate_fmt:.2f}{unit}{postfix}]"
|
|
37
|
+
self.__dict__.update(kwargs)
|
|
38
|
+
self.initial_start_time = time.time()
|
|
39
|
+
self.prev_update: float = self.initial_start_time
|
|
40
|
+
self.delta: float = 0
|
|
41
|
+
self.prev_value: float = self.initial_value
|
|
42
|
+
self.bprint_row_index = bprint.current_row
|
|
43
|
+
|
|
44
|
+
def __iter__(self):
|
|
45
|
+
self.bprint_row_index = bprint.current_row
|
|
46
|
+
for v in self.iterable:
|
|
47
|
+
self.update(1)
|
|
48
|
+
yield v
|
|
49
|
+
bprint.move_up()
|
|
50
|
+
bprint.clear_line()
|
|
51
|
+
if self.position > 0:
|
|
52
|
+
self.reset()
|
|
53
|
+
else:
|
|
54
|
+
self.draw()
|
|
55
|
+
|
|
56
|
+
def draw(self) -> None:
|
|
57
|
+
percent = self.current_value / self.total
|
|
58
|
+
num_to_fill = int(percent * self.ncols)
|
|
59
|
+
progress_str = num_to_fill * "#" + (self.ncols - num_to_fill) * " "
|
|
60
|
+
to_print = self.pbar_format.format(
|
|
61
|
+
l_bar=self.desc,
|
|
62
|
+
bar=progress_str,
|
|
63
|
+
n_fmt=self.current_value,
|
|
64
|
+
total_fmt=self.total,
|
|
65
|
+
elapsed=self.prev_update - self.initial_start_time,
|
|
66
|
+
remaining="?",
|
|
67
|
+
rate_fmt=(self.current_value - self.prev_value) /
|
|
68
|
+
self.delta if self.delta != 0 else 0,
|
|
69
|
+
postfix="/s",
|
|
70
|
+
unit=self.unit
|
|
71
|
+
)
|
|
72
|
+
bprint(to_print)
|
|
73
|
+
|
|
74
|
+
def update(self, amount: float = 1):
|
|
75
|
+
self.prev_value = self.current_value
|
|
76
|
+
self.current_value = min(
|
|
77
|
+
self.current_value + amount, self.total) # type:ignore
|
|
78
|
+
current_time = time.time()
|
|
79
|
+
self.delta = current_time - self.prev_update
|
|
80
|
+
self.prev_update = current_time
|
|
81
|
+
self.draw()
|
|
82
|
+
|
|
83
|
+
def _write(self, *args: str, sep: str = " ", end: str = "\n") -> None:
|
|
84
|
+
bprint.move_up()
|
|
85
|
+
bprint.clear_line()
|
|
86
|
+
if not end.endswith("\n"):
|
|
87
|
+
end += "\n"
|
|
88
|
+
bprint(sep.join(map(str, args)), end=end)
|
|
89
|
+
self.draw()
|
|
90
|
+
|
|
91
|
+
def reset(self) -> None:
|
|
92
|
+
self.current_value = self.initial_value
|
|
93
|
+
self.initial_start_time = time.time()
|
|
94
|
+
self.delta = 0
|
|
95
|
+
self.prev_value = self.initial_value
|
|
96
|
+
for _ in range(self.num_writes):
|
|
97
|
+
bprint.move_up()
|
|
98
|
+
bprint.clear_line()
|
|
99
|
+
self.num_writes = 0
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
__all__ = [
|
|
103
|
+
'AsciiProgressBar'
|
|
104
|
+
]
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import math
|
|
2
|
+
import time
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
from typing import Optional, Type, List, Iterable
|
|
5
|
+
|
|
6
|
+
try:
|
|
7
|
+
from tqdm import tqdm
|
|
8
|
+
except ImportError:
|
|
9
|
+
from ..mock_ import MockImportObject
|
|
10
|
+
|
|
11
|
+
tqdm = MockImportObject("`tqdm` is not installed") # type:ignore
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ProgressBar(ABC):
|
|
15
|
+
"""An interface
|
|
16
|
+
|
|
17
|
+
Args:
|
|
18
|
+
ABC (_type_): _description_
|
|
19
|
+
"""
|
|
20
|
+
DEFAULT_BAR_FORMAT = "{desc}: {percentage:3.0f}%|{bar}| {n_fmt}/{total_fmt} [{elapsed}<{remaining}"
|
|
21
|
+
|
|
22
|
+
@abstractmethod
|
|
23
|
+
def __init__(self, total, position: int, unit="it", bar_format: str = DEFAULT_BAR_FORMAT, **kwargs) -> None:
|
|
24
|
+
self.total = total
|
|
25
|
+
self.position = position
|
|
26
|
+
self.unit = unit
|
|
27
|
+
self.bar_format = bar_format
|
|
28
|
+
self.num_writes = 0
|
|
29
|
+
|
|
30
|
+
@abstractmethod
|
|
31
|
+
def update(self, amount: float = 1) -> None:
|
|
32
|
+
"""A function to update the progress-bar's value by a positive relative amount
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
@abstractmethod
|
|
36
|
+
def _write(self, *args: str, sep: str = " ", end: str = "\n") -> None: ...
|
|
37
|
+
|
|
38
|
+
def write(self, *args: str, sep: str = " ", end: str = "\n") -> None:
|
|
39
|
+
"""A function to write additional text with the progress bar
|
|
40
|
+
"""
|
|
41
|
+
self._write(*args, sep=sep, end=end)
|
|
42
|
+
self.num_writes += 1
|
|
43
|
+
|
|
44
|
+
@abstractmethod
|
|
45
|
+
def reset(self) -> None:
|
|
46
|
+
"""A function to reset the progress-bar's progress
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
ProgressBar.register(tqdm)
|
|
51
|
+
|
|
52
|
+
__all__ = [
|
|
53
|
+
'ProgressBar',
|
|
54
|
+
]
|
|
@@ -1,51 +1,46 @@
|
|
|
1
|
-
from typing import
|
|
2
|
-
from .
|
|
3
|
-
|
|
4
|
-
if get_python_version() >= (3, 9):
|
|
5
|
-
from builtins import list as List # type:ignore
|
|
6
|
-
try:
|
|
7
|
-
from tqdm import tqdm
|
|
8
|
-
except ImportError:
|
|
9
|
-
from .mock_ import MockImportObject
|
|
10
|
-
|
|
11
|
-
tqdm = MockImportObject("`tqdm` is not installed") # type:ignore
|
|
1
|
+
from typing import Type, List, Optional
|
|
2
|
+
from .progress_bar import ProgressBar
|
|
12
3
|
|
|
13
4
|
|
|
14
5
|
class ProgressBarPool:
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
6
|
+
def __init__(
|
|
7
|
+
self,
|
|
8
|
+
pbar_class: Type[ProgressBar],
|
|
9
|
+
num_of_bars: int = 1,
|
|
10
|
+
global_options: Optional[dict] = None,
|
|
11
|
+
individual_options: Optional[List[Optional[dict]]] = None
|
|
12
|
+
) -> None:
|
|
13
|
+
self.bars: List[ProgressBar] = []
|
|
22
14
|
if global_options is None:
|
|
23
15
|
global_options = {}
|
|
24
16
|
if individual_options is None:
|
|
25
17
|
individual_options = [{} for _ in range(num_of_bars)]
|
|
26
18
|
if len(individual_options) != num_of_bars:
|
|
27
|
-
raise ValueError(
|
|
19
|
+
raise ValueError(
|
|
20
|
+
"must supply the same number of options as there are bars")
|
|
28
21
|
for i in range(num_of_bars):
|
|
29
22
|
if individual_options[i] is None:
|
|
30
23
|
individual_options[i] = {}
|
|
24
|
+
max_desc_length: int = max([len(individual_options[i].get("desc", f"pbar {i}")) for i in range(num_of_bars)])
|
|
31
25
|
for i in range(num_of_bars):
|
|
32
26
|
final_options: dict = global_options.copy()
|
|
33
27
|
final_options.update(individual_options[i]) # type:ignore
|
|
34
28
|
if "desc" not in final_options:
|
|
35
29
|
final_options["desc"] = f"pbar {i}"
|
|
36
|
-
|
|
30
|
+
final_options["desc"] = final_options["desc"].ljust(max_desc_length, " ")
|
|
31
|
+
t = pbar_class(
|
|
37
32
|
position=i,
|
|
38
33
|
**final_options
|
|
39
34
|
)
|
|
40
35
|
self.bars.append(t)
|
|
41
36
|
|
|
37
|
+
def __getitem__(self, index: int) -> ProgressBar:
|
|
38
|
+
return self.bars[index]
|
|
39
|
+
|
|
42
40
|
def write(self, *args, sep=" ", end="\n") -> None:
|
|
43
|
-
"""
|
|
44
|
-
prints texts to the console **while** using tqdm progress bars
|
|
45
|
-
"""
|
|
46
41
|
self.bars[0].write(sep.join((str(a) for a in args)), end=end)
|
|
47
42
|
|
|
48
43
|
|
|
49
44
|
__all__ = [
|
|
50
|
-
"ProgressBarPool"
|
|
45
|
+
"ProgressBarPool",
|
|
51
46
|
]
|
|
@@ -12,6 +12,14 @@ class LayeredCommand:
|
|
|
12
12
|
_class_prev_instance: Optional['LayeredCommand'] = None
|
|
13
13
|
_id: int = 0
|
|
14
14
|
|
|
15
|
+
@property
|
|
16
|
+
def prev(self):
|
|
17
|
+
return self._prev_instance
|
|
18
|
+
|
|
19
|
+
@prev.setter
|
|
20
|
+
def prev(self, value: Optional['LayeredCommand'] = None):
|
|
21
|
+
self._prev_instance = value
|
|
22
|
+
|
|
15
23
|
def __init__(
|
|
16
24
|
self,
|
|
17
25
|
command: Optional[str] = None,
|
|
@@ -37,17 +45,17 @@ class LayeredCommand:
|
|
|
37
45
|
self._open()
|
|
38
46
|
return self
|
|
39
47
|
|
|
48
|
+
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
49
|
+
if self.prev is self._cur_class_prev_instance:
|
|
50
|
+
LayeredCommand._class_prev_instance = self.prev
|
|
51
|
+
|
|
40
52
|
def _open(self) -> None:
|
|
41
53
|
self._has_entered = True
|
|
42
54
|
|
|
43
|
-
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
44
|
-
if self._prev_instance is self._cur_class_prev_instance:
|
|
45
|
-
LayeredCommand._class_prev_instance = self._prev_instance
|
|
46
|
-
|
|
47
55
|
def _build_command(self, *commands: str) -> str:
|
|
48
56
|
res = ""
|
|
49
|
-
if self.
|
|
50
|
-
prev = self.
|
|
57
|
+
if self.prev is not None:
|
|
58
|
+
prev = self.prev._build_command()
|
|
51
59
|
res += f"{prev} & " if prev != "" else ""
|
|
52
60
|
if self._command != "":
|
|
53
61
|
return res + " & ".join([self._command, *commands])
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: danielutils
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.83
|
|
4
4
|
Summary: A python utils library for things I find useful
|
|
5
5
|
Author-email: danielnachumdev <danielnachumdev@gmail.com>
|
|
6
6
|
License: MIT License
|
|
@@ -41,7 +41,7 @@ License-File: LICENSE
|
|
|
41
41
|
[](https://www.python.org/downloads/release/python-31011/)
|
|
42
42
|
[](https://github.com/danielnachumdev/danielutils/actions/workflows/gitleaks.yml)
|
|
43
43
|
[](https://github.com/danielnachumdev/danielutils/actions/workflows/github-code-scanning/codeql)
|
|
44
|
-
# danielutils v=0.9.
|
|
44
|
+
# danielutils v=0.9.83
|
|
45
45
|
A utils library for things that I find useful for my coding workflow.\
|
|
46
46
|
Feel free to use and / or contribute / improve my code :)
|
|
47
47
|
|
|
@@ -17,7 +17,6 @@ danielutils/print_.py
|
|
|
17
17
|
danielutils/py.typed
|
|
18
18
|
danielutils/text.py
|
|
19
19
|
danielutils/time.py
|
|
20
|
-
danielutils/tqdm_.py
|
|
21
20
|
danielutils/versioned_imports.py
|
|
22
21
|
danielutils.egg-info/PKG-INFO
|
|
23
22
|
danielutils.egg-info/SOURCES.txt
|
|
@@ -97,6 +96,7 @@ danielutils/functions/flatten.py
|
|
|
97
96
|
danielutils/functions/isoftype.py
|
|
98
97
|
danielutils/functions/isoneof.py
|
|
99
98
|
danielutils/functions/multiloop.py
|
|
99
|
+
danielutils/functions/parallel_for.py
|
|
100
100
|
danielutils/functions/powerset.py
|
|
101
101
|
danielutils/functions/subseteq.py
|
|
102
102
|
danielutils/functions/types_subseteq.py
|
|
@@ -109,8 +109,6 @@ danielutils/math_/constants.py
|
|
|
109
109
|
danielutils/math_/functions.py
|
|
110
110
|
danielutils/math_/math_print.py
|
|
111
111
|
danielutils/math_/math_symbols.py
|
|
112
|
-
danielutils/math_/polynomial/__init__.py
|
|
113
|
-
danielutils/math_/polynomial/polinomial.py
|
|
114
112
|
danielutils/metaclasses/__init__.py
|
|
115
113
|
danielutils/metaclasses/atomic_class_meta.py
|
|
116
114
|
danielutils/metaclasses/implicit_data_deleter_meta.py
|
|
@@ -120,6 +118,10 @@ danielutils/metaclasses/overload_meta.py
|
|
|
120
118
|
danielutils/mock_/__init__.py
|
|
121
119
|
danielutils/mock_/mock_database.py
|
|
122
120
|
danielutils/mock_/mock_module.py
|
|
121
|
+
danielutils/progress_bar/__init__.py
|
|
122
|
+
danielutils/progress_bar/ascii_progress_bar.py
|
|
123
|
+
danielutils/progress_bar/progress_bar.py
|
|
124
|
+
danielutils/progress_bar/progress_bar_pool.py
|
|
123
125
|
danielutils/protocols/__init__.py
|
|
124
126
|
danielutils/protocols/dictable.py
|
|
125
127
|
danielutils/protocols/evaluable.py
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
from .polinomial import *
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
from typing import TypeVar, List as List
|
|
2
|
-
from copy import deepcopy
|
|
3
|
-
from fractions import Fraction
|
|
4
|
-
from ...reflection import get_python_version
|
|
5
|
-
|
|
6
|
-
if get_python_version() >= (3, 9):
|
|
7
|
-
from builtins import list as List
|
|
8
|
-
from builtins import dict as Dict
|
|
9
|
-
from ...print_ import mprint
|
|
10
|
-
|
|
11
|
-
Number = TypeVar("Number", int, float, Fraction, complex)
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class Polynomial:
|
|
15
|
-
def __init__(self, coefficients: List[Number], powers: List[Number]):
|
|
16
|
-
self._coefficients = coefficients
|
|
17
|
-
self._powers = powers
|
|
18
|
-
|
|
19
|
-
@property
|
|
20
|
-
def coefficients(self) -> List[Fraction]:
|
|
21
|
-
return deepcopy(self._coefficients)
|
|
22
|
-
|
|
23
|
-
@property
|
|
24
|
-
def powers(self) -> List[Fraction]:
|
|
25
|
-
return deepcopy(self._powers)
|
|
26
|
-
|
|
27
|
-
def __len__(self):
|
|
28
|
-
return len(self.coefficients)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
__all__ = [
|
|
32
|
-
"Polynomial"
|
|
33
|
-
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{danielutils-0.9.82 → danielutils-0.9.83}/danielutils/abstractions/database/cached_database.py
RENAMED
|
File without changes
|
|
File without changes
|
{danielutils-0.9.82 → danielutils-0.9.83}/danielutils/abstractions/database/redis_database.py
RENAMED
|
File without changes
|
{danielutils-0.9.82 → danielutils-0.9.83}/danielutils/abstractions/multiprogramming/__init__.py
RENAMED
|
File without changes
|
{danielutils-0.9.82 → danielutils-0.9.83}/danielutils/abstractions/multiprogramming/multi_id.py
RENAMED
|
File without changes
|
{danielutils-0.9.82 → danielutils-0.9.83}/danielutils/abstractions/multiprogramming/worker.py
RENAMED
|
File without changes
|
{danielutils-0.9.82 → danielutils-0.9.83}/danielutils/abstractions/multiprogramming/worker_pool.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{danielutils-0.9.82 → danielutils-0.9.83}/danielutils/better_builtins/typed_builtins/__init__.py
RENAMED
|
File without changes
|
{danielutils-0.9.82 → danielutils-0.9.83}/danielutils/better_builtins/typed_builtins/factory.py
RENAMED
|
File without changes
|
{danielutils-0.9.82 → danielutils-0.9.83}/danielutils/better_builtins/typed_builtins/tdict.py
RENAMED
|
File without changes
|
{danielutils-0.9.82 → danielutils-0.9.83}/danielutils/better_builtins/typed_builtins/tlist.py
RENAMED
|
File without changes
|
{danielutils-0.9.82 → danielutils-0.9.83}/danielutils/better_builtins/typed_builtins/tset.py
RENAMED
|
File without changes
|
{danielutils-0.9.82 → danielutils-0.9.83}/danielutils/better_builtins/typed_builtins/ttuple.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{danielutils-0.9.82 → danielutils-0.9.83}/danielutils/conversions/specialized_conversions/to_hex.py
RENAMED
|
File without changes
|
{danielutils-0.9.82 → danielutils-0.9.83}/danielutils/conversions/specialized_conversions/to_int.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|