Giter Club home page Giter Club logo

carefree-toolkit's Introduction

carefree-toolkit

carefree-toolkit implemented some commonly used functions and modules

Installation

carefree-toolkit requires Python 3.8 or higher.

pip install carefree-toolkit

or

git clone https://github.com/carefree0910/carefree-toolkit.git
cd carefree-toolkit
pip install -e .

Usages

timeit

class timeit(context_error_handler):
    def __init__(self, msg)

Timing context manager.

Parameters

  • msg : str, name of the context which we want to timeit.

Example

import time
from cftool.misc import timeit

# ~~~  [ info ] timing for     sleep 1s     : 1.0002
with timeit("sleep 1s"):
    time.sleep(1)

timestamp

def timestamp(simplify=False, ensure_different=False) -> str

Return current timestamp.

Parameters

  • simplify : bool. If True, format will be simplified to 'year-month-day'.
  • ensure_different : bool. If True, format will include millisecond.

Example

from cftool.misc import timestamp

# 2019-09-30_21-49-56
print(timestamp())
# 2019-09-30
print(timestamp(simplify=True))
# 2019-09-30_21-49-56-279768
print(timestamp(ensure_different=True))

prod

def prod(iterable) -> float

Return cumulative production of an iterable.

Parameters

  • iterable : iterable.

Example

from cftool.misc import prod

# 120.0
print(prod(range(1, 6)))

hash_code

def hash_code(code) -> str

Return hash code for string code.

Parameters

  • code : str.

Example

from cftool.misc import hash_code

# True
hash_code("a") != hash_code("b")

prefix_dict

def prefix_dict(d, prefix) -> dict

Prefix every key in dict d with prefix, connected with '_'.

Parameters

  • d : dict.
  • prefix : str.

Example

from cftool.misc import prefix_dict

# {"foo_a": 1, "foo_b": 2}
print(prefix_dict({"a": 1, "b": 2}, "foo"))

shallow_copy_dict

def shallow_copy_dict(d) -> dict

Shallow copy dict d, nested dict is also supported.

Parameters

  • d : dict.

Example

from cftool.misc import shallow_copy_dict

d = {"a": 1, "b": {"c": 2, "d": 3}}
sd = shallow_copy_dict(d)
d_copy = d.copy()
d["b"].pop("c")
# {'a': 1, 'b': {'d': 3}}
print(d)
# {'a': 1, 'b': {'c': 2, 'd': 3}}
print(sd)
# {'a': 1, 'b': {'d': 3}}
print(d_copy)

update_dict

def update_dict(src_dict, tgt_dict) -> dict

Update tgt_dict with src_dict.

Changes will happen only on keys which src_dict holds, and the update procedure will be recursive.

Changed will happen inplace.

Parameters

  • src_dict : dict.
  • tgt_dict : str.

Example

from cftool.misc import update_dict

src_dict = {"a": {"b": 1}, "c": 2}
tgt_dict = {"a": {"b": 0, "b1": 1}, "c": 0, "d": 1}
# {"a": {"b": 1, "b1": 1}, "c": 2, "d": 1}
print(update_dict(src_dict, tgt_dict))

fix_float_to_length

def fix_float_to_length(num, length) -> str

Change a float number to string format with fixed length.

Parameters

  • num : float.
  • length : int.

Example

import math
from cftool.misc import fix_float_to_length

# 1.000000
print(fix_float_to_length(1, 8))
# 1.000000
print(fix_float_to_length(1., 8))
# 1.000000
print(fix_float_to_length(1.0, 8))
# -1.00000
print(fix_float_to_length(-1, 8))
# -1.00000
print(fix_float_to_length(-1., 8))
# -1.00000
print(fix_float_to_length(-1.0, 8))
# 1234567.
print(fix_float_to_length(1234567, 8))
# 12345678
print(fix_float_to_length(12345678, 8))
# 123456789
print(fix_float_to_length(123456789, 8))
# +  nan   +
print("+" + fix_float_to_length(math.nan, 8) + "+")

truncate_string_to_length

def truncate_string_to_length(string, length) -> str

Truncate a string to make sure its length not exceeding a given length.

Parameters

  • string : str.
  • length : int.

Example

from cftool.misc import truncate_string_to_length

# 123456
print(truncate_string_to_length("123456", 6))
# 12..67
print(truncate_string_to_length("1234567", 6))
# 12..78
print(truncate_string_to_length("12345678", 6))
# 12...78
print(truncate_string_to_length("12345678", 7))

grouped

def grouped(iterable, n, *, keep_tail) -> list

Group an iterable every n elements.

Parameters

  • iterable : iterable.
  • n : int.
  • keep_tail : bool, whether keep the 'tail' (see example below).

Example

from cftool.misc import grouped

# [(0, 1), (2, 3), (4, 5)]
print(grouped(range(6), 2))
# [(0, 1, 2), (3, 4, 5)]
print(grouped(range(6), 3))
# [(0, 1, 2, 3)]
print(grouped(range(6), 4))
# [(0, 1, 2, 3), (4, 5)]
print(grouped(range(6), 4, keep_tail=True))

is_number

def is_numeric(s) -> bool

Check whether string s is numeric.

Parameters

  • s : str.

Example

from cftool.misc import is_numeric

# True
print(is_numeric(0x1))
# True
print(is_numeric(1e0))
# True
print(is_numeric("1"))
# True
print(is_numeric("1."))
# True
print(is_numeric("1.0"))
# True
print(is_numeric("1.00"))
# False
print(is_numeric("1.0.0"))
# True
print(is_numeric("nan"))

get_one_hot

def get_one_hot(feature, dim) -> np.ndarray

Get one-hot representation.

Parameters

  • feature : array-like, source data of one-hot representation.
  • dim : int, dimension of the one-hot representation.

Example

import numpy as np
from cftool.array import get_one_hot

feature = np.array([0, 1, 0])
# [[1 0], [0 1], [1 0]]
print(get_one_hot(feature, 2))
# [[1 0 0] [0 1 0] [1 0 0]]
print(get_one_hot(feature, 3))
# [[1 0 0] [0 1 0] [1 0 0]]
print(get_one_hot(feature.tolist(), 3))

get_indices_from_another

def get_indices_from_another(base, segment) -> np.ndarray

Get segment elements' indices in base. This function will return positions where elements in segment appear in base.

All elements in segment should appear in base to ensure validity.

Parameters

  • base : np.ndarray, base array.
  • segment : np.ndarray, segment array.

Example

import numpy as np
from cftool.array import get_indices_from_another

base, segment = np.array([1, 2, 3, 5, 7, 8, 9]), np.array([1, 3, 5, 7, 9])
# [0 2 3 4 6]
print(get_indices_from_another(base, segment))
# [0 1 2 3 4]
print(get_indices_from_another(segment, segment))
# [4 3 2 1 0]
print(get_indices_from_another(segment[::-1], segment))

get_unique_indices

def get_unique_indices(arr) -> UniqueIndices

Get indices for unique values of an array.

Parameters

  • arr : np.ndarray, target array which we wish to find indices of each unique value.
  • return_raw : bool, whether returning raw information.

Example

import numpy as np
from cftool.array import get_unique_indices

arr = np.array([1, 2, 3, 2, 4, 1, 0, 1], np.int64)
unique_indices = get_unique_indices(arr)
# UniqueIndices(
#   unique          = array([0, 1, 2, 3, 4], dtype=int64),
#   unique_cnt      = array([1, 3, 2, 1, 1], dtype=int64),
#   sorting_indices = array([6, 0, 5, 7, 1, 3, 2, 4], dtype=int64),
#   split_arr       = array([1, 4, 6, 7], dtype=int64))
#   split_indices   = [array([6], dtype=int64), array([0, 5, 7], dtype=int64), array([1, 3], dtype=int64),
#                      array([2], dtype=int64), array([4], dtype=int64)]
print(get_unique_indices(arr))

And more...

carefree-toolkit is well documented, feel free to dive into the codes and explore something you may need!

License

carefree-toolkit is MIT licensed, as found in the LICENSE file.


carefree-toolkit's People

Contributors

carefree0910 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.