환영! 새로운 프로젝트의 경우 이제 새로운 Jaxtyping 프로젝트를 대신 사용하는 것이 좋습니다 . Pytorch를 지원하고 실제로 JAX에 의존하지 않으며 Torchtyping과 달리 정적 유형 체커와 호환됩니다. :)
이것을 돌리십시오 :
def batch_outer_product ( x : torch . Tensor , y : torch . Tensor ) -> torch . Tensor :
# x has shape (batch, x_channels)
# y has shape (batch, y_channels)
# return has shape (batch, x_channels, y_channels)
return x . unsqueeze ( - 1 ) * y . unsqueeze ( - 2 )이것으로 :
def batch_outer_product ( x : TensorType [ "batch" , "x_channels" ],
y : TensorType [ "batch" , "y_channels" ]
) -> TensorType [ "batch" , "x_channels" , "y_channels" ]:
return x . unsqueeze ( - 1 ) * y . unsqueeze ( - 2 )프로그래밍 방식으로 모양 (dtype, ...) 사양이 충족되었는지 확인합니다.
안녕 버그! 코드를 시행하고 명확하게 문서화하기 위해 인사하십시오.
(나와 같은) # x has shape (batch, hidden_state) 같은 주석으로 코드를 쓰러 뜨린다면 assert x.shape == y.shape 와 같은 # x와 같은 댓글이 있거나 모든 것이 무엇인지 추적하기 위해 이것은 당신을위한 것입니다.
pip install torchtypingPython> = 3.7 및 Pytorch> = 1.7.0이 필요합니다.
typeguard 사용하는 경우 <3.0.0 버전이어야합니다.
torchtyping 유형 주석을 달성 할 수 있습니다.
... ;torchtyping 매우 확장 가능하기 때문에 당신이 좋아하는 다른 모든 것 . typeguard 가 (선택적으로) 설치된 경우 런타임에 텐서가 실제로 광고 된 모양, DType 등을 확인하기 위해 유형을 확인할 수 있습니다.
# EXAMPLE
from torch import rand
from torchtyping import TensorType , patch_typeguard
from typeguard import typechecked
patch_typeguard () # use before @typechecked
@ typechecked
def func ( x : TensorType [ "batch" ],
y : TensorType [ "batch" ]) -> TensorType [ "batch" ]:
return x + y
func ( rand ( 3 ), rand ( 3 )) # works
func ( rand ( 3 ), rand ( 1 ))
# TypeError: Dimension 'batch' of inconsistent size. Got both 1 and 3. typeguard @typeguard.typechecked Decorators를 수동으로 추가 할 필요없이 전체 모듈을 자동으로 테스트하는 데 사용할 수있는 가져 오기 후크가 있습니다.
typeguard 사용하지 않는 경우 torchtyping.patch_typeguard() 모두 생략하고 torchtyping 문서화 목적으로 사용됩니다. 일반 Python 프로그래밍에 typeguard 아직 사용하지 않는 경우 사용을 강력히 고려하십시오. 버그를 스쿼시하는 좋은 방법입니다. typeguard 와 torchtyping 모두 pytest 와 통합되므로 성과 페널티에 대해 우려하는 경우 테스트 중에 만 가능하게 할 수 있습니다.
torchtyping . TensorType [ shape , dtype , layout , details ]도서관의 핵심.
각 shape , dtype , layout , details 선택 사항입니다.
shape 인수는 다음 중 하나 일 수 있습니다.int : 치수는이 크기가 정확해야합니다. -1 인 경우 모든 크기가 허용됩니다.str : 런타임에 전달 된 치수의 크기는이 이름에 바인딩되며 모든 텐서는 크기가 일관성이 있는지 확인했습니다.... : 모든 크기의 임의의 차원.str: int 쌍 (기술적으로 슬라이스), str 와 int 동작을 모두 결합합니다. ( str 자체는 str: -1 과 동일합니다.)str: str 쌍,이 경우 런타임에서 전달 된 치수의 크기는 두 이름 모두에 바인딩되며 이름의 모든 치수는 크기가 동일해야합니다. (어떤 사람들은 이것을 추가 문서화 목적으로 여러 이름을 차원과 연결하는 방법으로 사용하는 것을 좋아합니다.)str: ... 쌍, 즉, 해당하는 다중 치수는 ... 에 str 지정된 이름에 바인딩되며 다시 인수 사이의 일관성을 확인했습니다.is_named 와 함께 사용될 때 None 은 이름이 지정된 텐서를 의미 하지 않아야 하는 치수를 나타냅니다.None: int 쌍, None 과 int 동작을 결합합니다. (그 자체로는 그 자체로는 None None: -1 .)None: str 쌍, None 과 str 동작을 결합합니다. (즉, 명명 된 차원이 없어야하지만 문자열의 다른 용도와 일치하는 크기 여야합니다.)typing.Any -1TensorType["batch": ..., "length": 10, "channels", -1] . 차원 수를 지정하려면 3 차원 텐서에 대해서는 TensorType[-1, -1, -1] 에 사용하십시오.dtype 인수는 다음 중 하나 일 수 있습니다.torch.float32 , torch.float64 등int , bool , float 는 해당 Pytorch 유형으로 변환됩니다. float 특별히 torch.get_default_dtype() 로 해석되며 일반적으로 float32 입니다.layout 인수는 각각 조밀하고 드문 텐서를 위해 torch.strided 또는 torch.sparse_coo 일 수 있습니다.details 인수는 torchtyping 사용자 정의하고 확장하는 임의의 추가 플래그를 전달하는 방법을 제공합니다. 기본적으로 두 개의 플래그가 내장되어 있습니다. torchtyping.is_named 는 텐서 치수의 이름을 확인하고 torchtyping.is_float 는 임의의 부동 소수점 TensorType[torch.float32] torchtyping 전달되는지 확인하는 details 사용될 수 있습니다.[] 안에 모두 모아서 한 번에 여러 가지를 확인하십시오. 예를 들어 TensorType["batch": ..., "length", "channels", float, is_named] . torchtyping . patch_typeguard () torchtyping typeguard 와 통합되어 런타임 유형 확인을 수행합니다. torchtyping.patch_typeguard() 글로벌 레벨에서 호출해야하며 TensorType s를 확인하기 위해 typeguard 패치해야합니다.
이 기능은 여러 번 실행하기에 안전합니다. (첫 번째 달리기 후에는 아무것도하지 않습니다).
@typeguard.typechecked 사용하는 경우 torchtyping.patch_typeguard() 는 @typeguard.typechecked 사용하기 전에 언제든지 호출해야합니다. 예를 들어 torchtyping 사용하여 각 파일의 시작 부분에서 호출 할 수 있습니다.typeguard.importhook.install_import_hook 사용하는 경우, 확인하려는 함수를 정의하기 전에 torchtyping.patch_typeguard() 언제든지 호출해야합니다. 예를 들어 typeguard 가져 오기 고리와 동시에 torchtyping.patch_typeguard() 한 번만 호출 할 수 있습니다. (후크와 패치의 순서는 중요하지 않습니다.)typeguard 사용하지 않는 경우 torchtyping.patch_typeguard() 모두 생략하고 torchtyping 문서화 목적으로 사용됩니다. pytest --torchtyping-patch-typeguard torchtyping 테스트 전에 torchtyping.patch_typeguard() 자동으로 실행할 수있는 pytest 플러그인을 제공합니다. pytest 플러그인을 자동으로 발견 할 수 있으므로 --torchtyping-patch-typeguard 플래그를 통과하기 만하면 가능합니다. 그런 다음 @typeguard.typechecked , typeguard 의 import hook 또는 pytest 플래그 --typeguard-packages="your_package_here" 사용하여 패키지를 정상적으로 typeguard 로 전달할 수 있습니다.
다음에 대한 추가 설명서를 참조하십시오.
flake8 및 mypy 호환성 포함;torchtyping 에 맞춤형 확장을 작성하는 방법;