Skip to main content

Monkey-patched numpy with pytorch syntax

Project description

numpytorch

Monkey-patched numpy with pytorch syntax.

If you are also tired of dim, axis, keepdim, keepdims, cat, concatenate , or wasted enough time debugging repeat(), meshgrid(), this package provides a dirty solution:

# Just replace the import

#import numpy as np
import numpytorch as np

# use the torch syntax:
x = np.randn(2, 3)
x = x.permute(1, 0).unsqueeze(-1)
x = x.add(1).abs().sin()

# while it won't break the original numpy syntax:
x = np.random.rand(2, 3)
x = np.expand_dims(x.transpose(1, 0), -1)
x = np.sin(np.abs(x + 1))

Features

  • fully compatible with pure numpy code.

  • patched most pytorch functions and Tensor methods into numpy and ndarray.

Install

Only Cpython is supported since we use forbiddenfruit to extend the built-in np.ndarray.

pip install numpytorch

Documentations

Since there are conflicted names in numpy and pytorch, such as np.stack() & torch.stack(), ndarray.view() & Tensor.view(), two modes are provided to handle these conflicts: compatible or override.

In the default compatible mode, all of the names in numpy are kept unchanged:

  • If the name is conflicted, we add torch_{name} to distinguish from the original numpy method.

    np.torch_stack()
    arr.torch_view()
    np.stack() # original numpy stack()
    arr.view() # original numpy.ndarray view()
    
  • If the name is not conflicted, we add both torch_{name} and {name}.

    np.torch_randn()
    arr.torch_permute()
    np.randn() # alias of torch_randn()
    arr.permute() # alias of torch_permute()
    

In the override mode, we instead keep the torch functions unchanged and rename numpy functions. {name} & torch_{name} are always added (except some special functions like view(), size), and the conflicted numpy versions are renamed to numpy_{name}. However, this is only experimental and may lead to unexpected bugs since it may break some numpy functions. Use at your own risk!

# 'compatible' mode is invoked by default at import
import numpytorch as np

# invoke override mode 
np.set_patch_mode('override')

# invoke compatible mode
np.set_patch_mode('compatible')

# remove all patches
np.set_patch_mode('none')

# list current patches
np.list_patches()

All of the patched functions and methods are listed below. Unless specifically mentioned, they should behave similarly as the torch counterparts.

============== np.* ==============

torch_cat (tensors: Sequence[numpy.ndarray], dim: int = 0, out: Union[numpy.ndarray, NoneType] = None)

cat (tensors: Sequence[numpy.ndarray], dim: int = 0, out: Union[numpy.ndarray, NoneType] = None)

torch_chunk (input: numpy.ndarray, chunks: int, dim: int = 0)

chunk (input: numpy.ndarray, chunks: int, dim: int = 0)

torch_gather (input: numpy.ndarray, dim: int, index: numpy.ndarray, out: Union[numpy.ndarray, NoneType] = None)

gather (input: numpy.ndarray, dim: int, index: numpy.ndarray, out: Union[numpy.ndarray, NoneType] = None)

torch_index_select (input: numpy.ndarray, dim: int, index: numpy.ndarray, out: Union[numpy.ndarray, NoneType] = None)

index_select (input: numpy.ndarray, dim: int, index: numpy.ndarray, out: Union[numpy.ndarray, NoneType] = None)

torch_masked_select (input: numpy.ndarray, mask: numpy.ndarray, out: Union[numpy.ndarray, NoneType] = None)

masked_select (input: numpy.ndarray, mask: numpy.ndarray, out: Union[numpy.ndarray, NoneType] = None)

torch_movedim (input: numpy.ndarray, source: Union[int, Tuple[int]], destination: Union[int, Tuple[int]])

movedim (input: numpy.ndarray, source: Union[int, Tuple[int]], destination: Union[int, Tuple[int]])

torch_swapdims (input: numpy.ndarray, dim0: int, dim1: int)

swapdims (input: numpy.ndarray, dim0: int, dim1: int)

torch_narrow (input: numpy.ndarray, dim: int, start: int, length: int)

narrow (input: numpy.ndarray, dim: int, start: int, length: int)

torch_nonzero (input: numpy.ndarray, as_tuple: bool = False)

torch_scatter (input: numpy.ndarray, dim: int, index: numpy.ndarray, src: numpy.ndarray, reduce: Union[str, NoneType] = None)

scatter (input: numpy.ndarray, dim: int, index: numpy.ndarray, src: numpy.ndarray, reduce: Union[str, NoneType] = None)

torch_scatter_add (input: numpy.ndarray, dim: int, index: numpy.ndarray, src: numpy.ndarray)

scatter_add (input: numpy.ndarray, dim: int, index: numpy.ndarray, src: numpy.ndarray)

torch_split (input: numpy.ndarray, split_size_or_sections: Union[int, Sequence[int]], dim: int = 0)

torch_squeeze (input: numpy.ndarray, dim: Union[int, NoneType] = None)

torch_stack (input: Sequence[numpy.ndarray], dim: int = 0, out: Union[numpy.ndarray, NoneType] = None)

torch_unsqueeze (input: numpy.ndarray, dim: int)

unsqueeze (input: numpy.ndarray, dim: int)

torch_unbind (input: numpy.ndarray, dim: int = 0)

unbind (input: numpy.ndarray, dim: int = 0)

torch_meshgrid (*xi: numpy.ndarray)

torch_clone (input: numpy.ndarray)

clone (input: numpy.ndarray)

torch_is_contiguous (input: numpy.ndarray)

is_contiguous (input: numpy.ndarray)

torch_contiguous (input: numpy.ndarray)

contiguous (input: numpy.ndarray)

torch_repeat (input: numpy.ndarray, *sizes: int)

torch_repeat_interleave (input: numpy.ndarray, repeats: Union[int, numpy.ndarray], dim: Union[int, NoneType] = None)

repeat_interleave (input: numpy.ndarray, repeats: Union[int, numpy.ndarray], dim: Union[int, NoneType] = None)

torch_permute (input: numpy.ndarray, *axes: int)

permute (input: numpy.ndarray, *axes: int)

torch_view (input: numpy.ndarray, *sizes: int)

view (input: numpy.ndarray, *sizes: int)

torch_view_as (input: numpy.ndarray, other: numpy.ndarray)

view_as (input: numpy.ndarray, other: numpy.ndarray)

torch_expand (input: numpy.ndarray, *sizes: int)

Note: the output is read-only since we use np.broadcast_to to return a view of the input, which different from the original behavior of torch.expand().

expand (input: numpy.ndarray, *sizes: int)

torch_expand_as (input: numpy.ndarray, other: numpy.ndarray)

Note: the output is read-only.

expand_as (input: numpy.ndarray, other: numpy.ndarray)

torch_t (input: numpy.ndarray)

t (input: numpy.ndarray)

torch_seed ()

seed ()

torch_manual_seed (seed: int)

manual_seed (seed: int)

torch_rand (*size: int, out: Union[numpy.ndarray, NoneType] = None)

rand (*size: int, out: Union[numpy.ndarray, NoneType] = None)

torch_rand_like (input: numpy.ndarray)

rand_like (input: numpy.ndarray)

torch_randint (low: int, high: Union[int, NoneType] = None, size: Union[Sequence[int], NoneType] = None, out: Union[numpy.ndarray, NoneType] = None)

randint (low: int, high: Union[int, NoneType] = None, size: Union[Sequence[int], NoneType] = None, out: Union[numpy.ndarray, NoneType] = None)

torch_randint_like (input: numpy.ndarray, low: int, high: Union[int, NoneType] = None)

randint_like (input: numpy.ndarray, low: int, high: Union[int, NoneType] = None)

torch_randn (*size: int, out: Union[numpy.ndarray, NoneType] = None)

randn (*size: int, out: Union[numpy.ndarray, NoneType] = None)

torch_randn_like (input: numpy.ndarray)

randn_like (input: numpy.ndarray)

torch_randperm (n: int, out: Union[numpy.ndarray, NoneType] = None)

randperm (n: int, out: Union[numpy.ndarray, NoneType] = None)

torch_clamp (input: numpy.ndarray, min: Union[numbers.Number, numpy.ndarray, NoneType] = None, max: Union[numbers.Number, numpy.ndarray, NoneType] = None)

clamp (input: numpy.ndarray, min: Union[numbers.Number, numpy.ndarray, NoneType] = None, max: Union[numbers.Number, numpy.ndarray, NoneType] = None)

torch_max (input: numpy.ndarray, dim: Union[int, numpy.ndarray, NoneType] = None, keepdim: bool = False, out: Union[numpy.ndarray, NoneType] = None)

max (input: numpy.ndarray, dim: Union[int, numpy.ndarray, NoneType] = None, keepdim: bool = False, out: Union[numpy.ndarray, NoneType] = None)

torch_min (input: numpy.ndarray, dim: Union[int, numpy.ndarray, NoneType] = None, keepdim: bool = False, out: Union[numpy.ndarray, NoneType] = None)

min (input: numpy.ndarray, dim: Union[int, numpy.ndarray, NoneType] = None, keepdim: bool = False, out: Union[numpy.ndarray, NoneType] = None)

torch_flatten (input: numpy.ndarray, start_dim: int = 0, end_dim: int = -1)

flatten (input: numpy.ndarray, start_dim: int = 0, end_dim: int = -1)

========== np.ndarray.* ==========

torch_dim attribute dim attribute torch_numel (self)

numel (self)

torch_index_select (input: numpy.ndarray, dim: int, index: numpy.ndarray, out: Union[numpy.ndarray, NoneType] = None)

index_select (input: numpy.ndarray, dim: int, index: numpy.ndarray, out: Union[numpy.ndarray, NoneType] = None)

torch_squeeze_ (input: numpy.ndarray, dim: Union[int, NoneType] = None)

squeeze_ (input: numpy.ndarray, dim: Union[int, NoneType] = None)

torch_unsqueeze (input: numpy.ndarray, dim: int)

unsqueeze (input: numpy.ndarray, dim: int)

torch_unsqueeze_ (input: numpy.ndarray, dim: int)

unsqueeze_ (input: numpy.ndarray, dim: int)

torch_is_contiguous (input: numpy.ndarray)

is_contiguous (input: numpy.ndarray)

torch_contiguous (input: numpy.ndarray)

contiguous (input: numpy.ndarray)

torch_clone (input: numpy.ndarray)

clone (input: numpy.ndarray)

torch_repeat (input: numpy.ndarray, *sizes: int)

torch_repeat_interleave (input: numpy.ndarray, repeats: Union[int, numpy.ndarray], dim: Union[int, NoneType] = None)

repeat_interleave (input: numpy.ndarray, repeats: Union[int, numpy.ndarray], dim: Union[int, NoneType] = None)

torch_view (input: numpy.ndarray, *sizes: int)

torch_permute (input: numpy.ndarray, *axes: int)

permute (input: numpy.ndarray, *axes: int)

torch_expand (input: numpy.ndarray, *sizes: int)

expand (input: numpy.ndarray, *sizes: int)

torch_expand_as (input: numpy.ndarray, other: numpy.ndarray)

expand_as (input: numpy.ndarray, other: numpy.ndarray)

torch_uniform_ (input: numpy.ndarray, fro: int = 0, to: int = 1)

uniform_ (input: numpy.ndarray, fro: int = 0, to: int = 1)

torch_normal_ (input: numpy.ndarray, mean: int = 0, std: int = 1)

normal_ (input: numpy.ndarray, mean: int = 0, std: int = 1)

torch_zero_ (input: numpy.ndarray)

zero_ (input: numpy.ndarray)

torch_clamp (input: numpy.ndarray, min: Union[numbers.Number, numpy.ndarray, NoneType] = None, max: Union[numbers.Number, numpy.ndarray, NoneType] = None)

clamp (input: numpy.ndarray, min: Union[numbers.Number, numpy.ndarray, NoneType] = None, max: Union[numbers.Number, numpy.ndarray, NoneType] = None)

torch_clamp_ (input: numpy.ndarray, min: Union[numbers.Number, numpy.ndarray, NoneType] = None, max: Union[numbers.Number, numpy.ndarray, NoneType] = None)

clamp_ (input: numpy.ndarray, min: Union[numbers.Number, numpy.ndarray, NoneType] = None, max: Union[numbers.Number, numpy.ndarray, NoneType] = None)

torch_clip_ (input: numpy.ndarray, min: Union[numbers.Number, numpy.ndarray, NoneType] = None, max: Union[numbers.Number, numpy.ndarray, NoneType] = None)

clip_ (input: numpy.ndarray, min: Union[numbers.Number, numpy.ndarray, NoneType] = None, max: Union[numbers.Number, numpy.ndarray, NoneType] = None)

torch_flatten (input: numpy.ndarray, start_dim: int = 0, end_dim: int = -1)

torch_max (input: numpy.ndarray, dim: Union[int, numpy.ndarray, NoneType] = None, keepdim: bool = False, out: Union[numpy.ndarray, NoneType] = None)

torch_min (input: numpy.ndarray, dim: Union[int, numpy.ndarray, NoneType] = None, keepdim: bool = False, out: Union[numpy.ndarray, NoneType] = None)

torch_amax (a, axis=None, out=None, keepdims=<no value>, initial=<no value>, where=<no value>)

amax (a, axis=None, out=None, keepdims=<no value>, initial=<no value>, where=<no value>)

torch_amin (a, axis=None, out=None, keepdims=<no value>, initial=<no value>, where=<no value>)

amin (a, axis=None, out=None, keepdims=<no value>, initial=<no value>, where=<no value>)

torch_half (self)

half (self)

torch_float (self)

float (self)

torch_double (self)

double (self)

torch_short (self)

short (self)

torch_int (self)

int (self)

torch_long (self)

long (self)

torch_bool (self)

bool (self)

torch_add (self, other)

add (self, other)

torch_add_ (self, other)

add_ (self, other)

torch_subtract (self, other)

subtract (self, other)

torch_subtract_ (self, other)

subtract_ (self, other)

torch_multiply (self, other)

multiply (self, other)

torch_multiply_ (self, other)

multiply_ (self, other)

torch_matmul (self, other)

matmul (self, other)

torch_matmul_ (self, other)

matmul_ (self, other)

torch_divide (self, other)

divide (self, other)

torch_divide_ (self, other)

divide_ (self, other)

torch_true_divide (self, other)

true_divide (self, other)

torch_true_divide_ (self, other)

true_divide_ (self, other)

torch_floor_divide (self, other)

floor_divide (self, other)

torch_floor_divide_ (self, other)

floor_divide_ (self, other)

torch_negative (self)

negative (self)

torch_negative_ (self)

negative_ (self)

torch_positive (self)

positive (self)

torch_positive_ (self)

positive_ (self)

torch_power (self, other)

power (self, other)

torch_power_ (self, other)

power_ (self, other)

torch_float_power (self, other)

float_power (self, other)

torch_float_power_ (self, other)

float_power_ (self, other)

torch_remainder (self, other)

remainder (self, other)

torch_remainder_ (self, other)

remainder_ (self, other)

torch_mod (self, other)

mod (self, other)

torch_mod_ (self, other)

mod_ (self, other)

torch_fmod (self, other)

fmod (self, other)

torch_fmod_ (self, other)

fmod_ (self, other)

torch_divmod (self, other)

divmod (self, other)

torch_divmod_ (self, other)

divmod_ (self, other)

torch_absolute (self)

absolute (self)

torch_absolute_ (self)

absolute_ (self)

torch_abs (self)

abs (self)

torch_abs_ (self)

abs_ (self)

torch_fabs (self)

fabs (self)

torch_fabs_ (self)

fabs_ (self)

torch_sign (self)

sign (self)

torch_sign_ (self)

sign_ (self)

torch_rint (self)

rint (self)

torch_rint_ (self)

rint_ (self)

torch_conj (self)

torch_conj_ (self)

conj_ (self)

torch_exp (self)

exp (self)

torch_exp_ (self)

exp_ (self)

torch_exp2 (self)

exp2 (self)

torch_exp2_ (self)

exp2_ (self)

torch_log (self)

log (self)

torch_log_ (self)

log_ (self)

torch_log2 (self)

log2 (self)

torch_log2_ (self)

log2_ (self)

torch_log10 (self)

log10 (self)

torch_log10_ (self)

log10_ (self)

torch_sqrt (self)

sqrt (self)

torch_sqrt_ (self)

sqrt_ (self)

torch_square (self)

square (self)

torch_square_ (self)

square_ (self)

torch_cbrt (self)

cbrt (self)

torch_cbrt_ (self)

cbrt_ (self)

torch_reciprocal (self)

reciprocal (self)

torch_reciprocal_ (self)

reciprocal_ (self)

torch_gcd (self, other)

gcd (self, other)

torch_gcd_ (self, other)

gcd_ (self, other)

torch_lcm (self, other)

lcm (self, other)

torch_lcm_ (self, other)

lcm_ (self, other)

torch_expm1 (self)

expm1 (self)

torch_expm1_ (self)

expm1_ (self)

torch_log1p (self)

log1p (self)

torch_log1p_ (self)

log1p_ (self)

torch_sin (self)

sin (self)

torch_sin_ (self)

sin_ (self)

torch_cos (self)

cos (self)

torch_cos_ (self)

cos_ (self)

torch_tan (self)

tan (self)

torch_tan_ (self)

tan_ (self)

torch_arcsin (self)

arcsin (self)

torch_arcsin_ (self)

arcsin_ (self)

torch_arccos (self)

arccos (self)

torch_arccos_ (self)

arccos_ (self)

torch_arctan (self)

arctan (self)

torch_arctan_ (self)

arctan_ (self)

torch_arctan2 (self, other)

arctan2 (self, other)

torch_arctan2_ (self, other)

arctan2_ (self, other)

torch_sinh (self)

sinh (self)

torch_sinh_ (self)

sinh_ (self)

torch_cosh (self)

cosh (self)

torch_cosh_ (self)

cosh_ (self)

torch_tanh (self)

tanh (self)

torch_tanh_ (self)

tanh_ (self)

torch_arcsinh (self)

arcsinh (self)

torch_arcsinh_ (self)

arcsinh_ (self)

torch_arccosh (self)

arccosh (self)

torch_arccosh_ (self)

arccosh_ (self)

torch_arctanh (self)

arctanh (self)

torch_arctanh_ (self)

arctanh_ (self)

torch_degrees (self)

degrees (self)

torch_degrees_ (self)

degrees_ (self)

torch_radians (self)

radians (self)

torch_radians_ (self)

radians_ (self)

torch_deg2rad (self)

deg2rad (self)

torch_deg2rad_ (self)

deg2rad_ (self)

torch_rad2deg (self)

rad2deg (self)

torch_rad2deg_ (self)

rad2deg_ (self)

torch_bitwise_and (self, other)

bitwise_and (self, other)

torch_bitwise_and_ (self, other)

bitwise_and_ (self, other)

torch_bitwise_or (self, other)

bitwise_or (self, other)

torch_bitwise_or_ (self, other)

bitwise_or_ (self, other)

torch_bitwise_xor (self, other)

bitwise_xor (self, other)

torch_bitwise_xor_ (self, other)

bitwise_xor_ (self, other)

torch_invert (self)

invert (self)

torch_invert_ (self)

invert_ (self)

torch_left_shift (self, other)

left_shift (self, other)

torch_left_shift_ (self, other)

left_shift_ (self, other)

torch_right_shift (self, other)

right_shift (self, other)

torch_right_shift_ (self, other)

right_shift_ (self, other)

torch_greater (self, other)

greater (self, other)

torch_greater_ (self, other)

greater_ (self, other)

torch_greater_equal (self, other)

greater_equal (self, other)

torch_greater_equal_ (self, other)

greater_equal_ (self, other)

torch_less (self, other)

less (self, other)

torch_less_ (self, other)

less_ (self, other)

torch_less_equal (self, other)

less_equal (self, other)

torch_less_equal_ (self, other)

less_equal_ (self, other)

torch_equal (self, other)

equal (self, other)

torch_equal_ (self, other)

equal_ (self, other)

torch_not_equal (self, other)

not_equal (self, other)

torch_not_equal_ (self, other)

not_equal_ (self, other)

torch_logical_and (self, other)

logical_and (self, other)

torch_logical_and_ (self, other)

logical_and_ (self, other)

torch_logical_or (self, other)

logical_or (self, other)

torch_logical_or_ (self, other)

logical_or_ (self, other)

torch_logical_not (self)

logical_not (self)

torch_logical_not_ (self)

logical_not_ (self)

torch_logical_xor (self, other)

logical_xor (self, other)

torch_logical_xor_ (self, other)

logical_xor_ (self, other)

torch_maximum (self, other)

maximum (self, other)

torch_maximum_ (self, other)

maximum_ (self, other)

torch_minimum (self, other)

minimum (self, other)

torch_minimum_ (self, other)

minimum_ (self, other)

torch_fmax (self, other)

fmax (self, other)

torch_fmax_ (self, other)

fmax_ (self, other)

torch_fmin (self, other)

fmin (self, other)

torch_fmin_ (self, other)

fmin_ (self, other)

torch_nextafter (self, other)

nextafter (self, other)

torch_nextafter_ (self, other)

nextafter_ (self, other)

torch_spacing (self)

spacing (self)

torch_spacing_ (self)

spacing_ (self)

torch_modf (self)

modf (self)

torch_modf_ (self)

modf_ (self)

torch_ldexp (self, other)

ldexp (self, other)

torch_ldexp_ (self, other)

ldexp_ (self, other)

torch_frexp (self)

frexp (self)

torch_frexp_ (self)

frexp_ (self)

torch_isfinite (self)

isfinite (self)

torch_isfinite_ (self)

isfinite_ (self)

torch_isinf (self)

isinf (self)

torch_isinf_ (self)

isinf_ (self)

torch_isnan (self)

isnan (self)

torch_isnan_ (self)

isnan_ (self)

torch_isnat (self)

isnat (self)

torch_isnat_ (self)

isnat_ (self)

torch_signbit (self)

signbit (self)

torch_signbit_ (self)

signbit_ (self)

torch_copysign (self, other)

copysign (self, other)

torch_copysign_ (self, other)

copysign_ (self, other)

torch_floor (self)

floor (self)

torch_floor_ (self)

floor_ (self)

torch_ceil (self)

ceil (self)

torch_ceil_ (self)

ceil_ (self)

torch_trunc (self)

trunc (self)

torch_trunc_ (self)

trunc_ (self)

torch_atan (self)

atan (self)

torch_atan_ (self)

atan_ (self)

torch_asin (self)

asin (self)

torch_asin_ (self)

asin_ (self)

torch_acos (self)

acos (self)

torch_acos_ (self)

acos_ (self)

torch_atan2 (self, other)

atan2 (self, other)

torch_atan2_ (self, other)

atan2_ (self, other)

torch_ge (self, other)

ge (self, other)

torch_ge_ (self, other)

ge_ (self, other)

torch_gt (self, other)

gt (self, other)

torch_gt_ (self, other)

gt_ (self, other)

torch_le (self, other)

le (self, other)

torch_le_ (self, other)

le_ (self, other)

torch_lt (self, other)

lt (self, other)

torch_lt_ (self, other)

lt_ (self, other)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

numpytorch-0.1.2.tar.gz (15.9 kB view details)

Uploaded Source

File details

Details for the file numpytorch-0.1.2.tar.gz.

File metadata

  • Download URL: numpytorch-0.1.2.tar.gz
  • Upload date:
  • Size: 15.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.7.4

File hashes

Hashes for numpytorch-0.1.2.tar.gz
Algorithm Hash digest
SHA256 5dea482beb9a23d53738aff479cc9862eff5cc68d483342036d49f48ad57b388
MD5 d694c9ea8205480532ad98418a080228
BLAKE2b-256 6472af8742629ace27dfe9834007c83f4b3d7634ae24adb3501ccb0bf69335e8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page