Skip to main content

torchlayers Logo


Version Docs Tests Coverage Style PyPI Python PyTorch Docker
Version Documentation Tests codecov codebeat badge PyPI Python PyTorch Docker

torchlayers is a library based on PyTorch providing automatic shape and dimensionality inference of torch.nn layers + additional building blocks featured in current SOTA architectures (e.g. Efficient-Net).

Above requires no user intervention (except single call to torchlayers.build) similarly to the one seen in Keras.

Main functionalities:

  • Shape inference for most of torch.nn module (convolutional, recurrent, transformer, attention and linear layers)
  • Dimensionality inference (e.g. torchlayers.Conv working as torch.nn.Conv1d/2d/3d based on input shape)
  • Shape inference of custom modules (see examples section)
  • Additional Keras-like layers (e.g. torchlayers.Reshape or torchlayers.StandardNormalNoise)
  • Additional SOTA layers mostly from ImageNet competitions (e.g. PolyNet, Squeeze-And-Excitation, StochasticDepth)
  • Useful defaults ("same" padding and default kernel_size=3 for Conv, dropout rates etc.)
  • Zero overhead and torchscript support

Keep in mind this library works almost exactly like PyTorch originally. What that means is you can use Sequential, define your own networks of any complexity using torch.nn.Module, create new layers with shape inference etc.

See below to get some intuition about library.

Examples

For full functionality please check torchlayers documentation. Below examples should introduce all necessary concepts you should know.

Basic classifier

All torch.nn modules can be used through torchlayers and each module with input shape will be appropriately modified with it's input inferable counterpart.

import torchlayers as tl


class Classifier(tl.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = tl.Conv2d(64, kernel_size=6)
        self.conv2 = tl.Conv2d(128, kernel_size=3)
        self.conv3 = tl.Conv2d(256, kernel_size=3, padding=1)
        # New layer, more on that in the next example
        self.pooling = tl.GlobalMaxPool()
        self.dense = tl.Linear(10)

    def forward(self, x):
        x = torch.relu(self.conv1(x))
        x = torch.relu(self.conv2(x))
        x = torch.relu(self.conv3(x))
        return self.dense(self.pooling(x))

# Pass model and any example inputs afterwards
clf = tl.build(Classifier(), torch.randn(1, 3, 32, 32))

Above torchlayers.Linear(out_features=10) is used. It is "equivalent" to original PyTorch's torch.nn.Linear(in_features=?, out_features=10) where in_features will be inferred from example input input during torchlayers.build call.

Same thing happens with torch.nn.Conv2d(in_channels, out_channels, kernel_size, ...) which can be replaced directly by tl.Conv2d(out_channels, kernel_size, ...).

Just remember to pass example input through the network!

Simple image and text classifier in one!

  • We will use single "model" for both tasks. Firstly let's define it using torch.nn and torchlayers:
import torch
import torchlayers as tl

# torch.nn and torchlayers can be mixed easily
model = torch.nn.Sequential(
    tl.Conv(64),  # specify ONLY out_channels
    torch.nn.ReLU(),  # use torch.nn wherever you wish
    tl.BatchNorm(),  # BatchNormNd inferred from input
    tl.Conv(128),  # Default kernel_size equal to 3
    tl.ReLU(),
    tl.Conv(256, kernel_size=11),  # "same" padding as default
    tl.GlobalMaxPool(),  # Known from Keras
    tl.Linear(10),  # Output for 10 classes
)

print(model)

Above would give you model's summary like this (notice question marks for not yet inferred values):

Sequential(
  (0): Conv(in_channels=?, out_channels=64, kernel_size=3, stride=1, padding=same, dilation=1, groups=1, bias=True, padding_mode=zeros)
  (1): ReLU()
  (2): BatchNorm(num_features=?, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
  (3): Conv(in_channels=?, out_channels=128, kernel_size=3, stride=1, padding=same, dilation=1, groups=1, bias=True, padding_mode=zeros)
  (4): ReLU()
  (5): Conv(in_channels=?, out_channels=256, kernel_size=11, stride=1, padding=same, dilation=1, groups=1, bias=True, padding_mode=zeros)
  (6): GlobalMaxPool()
  (7): Linear(in_features=?, out_features=10, bias=True)
)
  • Now you can build/instantiate your model with example input (in this case MNIST-like):
mnist_model = tl.build(model, torch.randn(1, 3, 28, 28))
  • Or if it's text classification you are after, same model could be built with different input shape (e.g. for text classification using 300 dimensional pretrained embedding):
# [batch, embedding, timesteps], first dimension > 1 for BatchNorm1d to work
text_model = tl.build(model, torch.randn(2, 300, 1))
  • Finally, you can print both models after instantiation, provided below side by-side for readability (notice different dimenstionality, e.g. Conv2d vs Conv1d after torchlayers.build):
                # TEXT CLASSIFIER                 MNIST CLASSIFIER

                Sequential(                       Sequential(
                  (0): Conv1d(300, 64)              (0): Conv2d(3, 64)
                  (1): ReLU()                       (1): ReLU()
                  (2): BatchNorm1d(64)              (2): BatchNorm2d(64)
                  (3): Conv1d(64, 128)              (3): Conv2d(64, 128)
                  (4): ReLU()                       (4): ReLU()
                  (5): Conv1d(128, 256)             (5): Conv2d(128, 256)
                  (6): GlobalMaxPool()              (6): GlobalMaxPool()
                  (7): Linear(256, 10)              (7): Linear(256, 10)
                )                                 )

As you can see both modules "compiled" into original pytorch layers.

Custom modules with shape inference capabilities

User can define any module and make it shape inferable with torchlayers.infer function:

 # Class defined with in_features
 # It might be a good practice to use _ prefix and Impl as postfix
 # to differentiate from shape inferable version
class _MyLinearImpl(torch.nn.Module):
    def __init__(self, in_features: int, out_features: int):
        super().__init__()
        self.weight = torch.nn.Parameter(torch.randn(out_features, in_features))
        self.bias = torch.nn.Parameter(torch.randn(out_features))

    def forward(self, inputs):
        return torch.nn.functional.linear(inputs, self.weight, self.bias)

MyLinear = tl.infer(_MyLinearImpl)

# Build and use just like any other layer in this library
layer =tl.build(MyLinear(out_features=32), torch.randn(1, 64))
layer(torch.randn(1, 64))

By default inputs.shape[1] will be used as in_features value during initial forward pass. If you wish to use different index (e.g. to infer using inputs.shape[3]) use MyLayer = tl.infer(_MyLayerImpl, index=3) as a decorator.

Autoencoder with inverted residual bottleneck and pixel shuffle

Please check code comments and documentation if needed. If you are unsure what autoencoder is you could see this example blog post.

Below is a convolutional denoising autoencoder example for ImageNet-like images. Think of it like a demonstration of capabilities of different layers and building blocks provided by torchlayers.

# Input - 3 x 256 x 256 for ImageNet reconstruction
class AutoEncoder(torch.nn.Module):
    def __init__(self):
        super().__init__()
        self.encoder = tl.Sequential(
            tl.StandardNormalNoise(),  # Apply noise to input images
            tl.Conv(64, kernel_size=7),
            tl.activations.Swish(),  # Direct access to module .activations
            tl.InvertedResidualBottleneck(squeeze_excitation=False),
            tl.AvgPool(),  # shape 64 x 128 x 128, kernel_size=2 by default
            tl.HardSwish(),  # Access simply through tl
            tl.SeparableConv(128),  # Up number of channels to 128
            tl.InvertedResidualBottleneck(),  # Default with squeeze excitation
            torch.nn.ReLU(),
            tl.AvgPool(),  # shape 128 x 64 x 64, kernel_size=2 by default
            tl.DepthwiseConv(256),  # DepthwiseConv easier to use
            # Pass input thrice through the same weights like in PolyNet
            tl.Poly(tl.InvertedResidualBottleneck(), order=3),
            tl.ReLU(),  # all torch.nn can be accessed via tl
            tl.MaxPool(),  # shape 256 x 32 x 32
            tl.Fire(out_channels=512),  # shape 512 x 32 x 32
            tl.SqueezeExcitation(hidden=64),
            tl.InvertedResidualBottleneck(),
            tl.MaxPool(),  # shape 512 x 16 x 16
            tl.InvertedResidualBottleneck(squeeze_excitation=False),
            # Randomly switch off the last two layers with 0.5 probability
            tl.StochasticDepth(
                torch.nn.Sequential(
                    tl.InvertedResidualBottleneck(squeeze_excitation=False),
                    tl.InvertedResidualBottleneck(squeeze_excitation=False),
                ),
                p=0.5,
            ),
            tl.AvgPool(),  # shape 512 x 8 x 8
        )

        # This one is more "standard"
        self.decoder = tl.Sequential(
            tl.Poly(tl.InvertedResidualBottleneck(), order=2),
            # Has ICNR initialization by default after calling `build`
            tl.ConvPixelShuffle(out_channels=512, upscale_factor=2),
            # Shape 512 x 16 x 16 after PixelShuffle
            tl.Poly(tl.InvertedResidualBottleneck(), order=3),
            tl.ConvPixelShuffle(out_channels=256, upscale_factor=2),
            # Shape 256 x 32 x 32
            tl.Poly(tl.InvertedResidualBottleneck(), order=3),
            tl.ConvPixelShuffle(out_channels=128, upscale_factor=2),
            # Shape 128 x 64 x 64
            tl.Poly(tl.InvertedResidualBottleneck(), order=4),
            tl.ConvPixelShuffle(out_channels=64, upscale_factor=2),
            # Shape 64 x 128 x 128
            tl.InvertedResidualBottleneck(),
            tl.Conv(256),
            tl.Dropout(),  # Defaults to 0.5 and Dropout2d for images
            tl.Swish(),
            tl.InstanceNorm(),
            tl.ConvPixelShuffle(out_channels=32, upscale_factor=2),
            # Shape 32 x 256 x 256
            tl.Conv(16),
            tl.Swish(),
            tl.Conv(3),
            # Shape 3 x 256 x 256
        )

    def forward(self, inputs):
        return self.decoder(self.encoder(inputs))

Now one can instantiate the module and use it with torch.nn.MSELoss as per usual.

autoencoder = tl.build(AutoEncoder(), torch.randn(1, 3, 256, 256))

Installation

pip

Latest release:

pip install --user torchlayers

Nightly:

pip install --user torchlayers-nightly

Docker

CPU standalone and various versions of GPU enabled images are available at dockerhub.

For CPU quickstart, issue:

docker pull szymonmaszke/torchlayers:18.04

Nightly builds are also available, just prefix tag with nightly_. If you are going for GPU image make sure you have nvidia/docker installed and it's runtime set.

Contributing

If you find issue or would like to see some functionality (or implement one), please open new Issue or create Pull Request.

Download files

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

Source Distribution

torchlayers-nightly-1711930087.tar.gz (41.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

torchlayers_nightly-1711930087-py3-none-any.whl (47.0 kB view details)

Uploaded Python 3

File details

Details for the file torchlayers-nightly-1711930087.tar.gz.

File metadata

File hashes

Hashes for torchlayers-nightly-1711930087.tar.gz
Algorithm Hash digest
SHA256 051fa8bf4f8635e6019973b6eef1e708c5845d9f6a929921ed323be1f7e3b8c8
MD5 92be22a121d4543988bf43e280f64565
BLAKE2b-256 3ce5a09409e21864c6f25bf51a347b47cf27856a847981b6d0c48eef80484be3

See more details on using hashes here.

File details

Details for the file torchlayers_nightly-1711930087-py3-none-any.whl.

File metadata

File hashes

Hashes for torchlayers_nightly-1711930087-py3-none-any.whl
Algorithm Hash digest
SHA256 5a03e51e93d8c4eb0424b095fbbe6e5937635091e839424d5dd9d1f0202d689b
MD5 f02a8bfdd8f24b4a99817366c652a7ca
BLAKE2b-256 6ecf88b14f9a31d5633d601125f48d98baa721f3cce21b415f1f9af44a55e8d3

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1711930087 This release

2 files

1711843712

2 files

1711757211

2 files

1711670846

2 files

1711584439

2 files

1711498027

2 files

1711411615

2 files

1711325269

2 files

1711238908

2 files

1711152422

2 files

1711066029

2 files

1710979654

2 files

1710893224

2 files

1710806820

2 files

1710720483

2 files

1710634068

2 files

1710547617

2 files

1710461228

2 files

1710374814

2 files

1710288439

2 files

1710202027

2 files

1710115645

2 files

1710029300

2 files

1709942794

2 files

1709856441

2 files

1709769947

2 files

1709683643

2 files

1709597233

2 files

1709510848

2 files

1709424462

2 files

1709338004

2 files

1709251697

2 files

1709165235

2 files

1709078814

2 files

1708992459

2 files

1708906036

2 files

1708819655

2 files

1708733197

2 files

1708646816

2 files

1708560418

2 files

1708474033

2 files

1708387624

2 files

1708301249

2 files

1708214871

2 files

1708128398

2 files

1708042021

2 files

1707955626

2 files

1707869215

2 files

1707782846

2 files

1707696443

2 files

1707610076

2 files

1707523622

2 files

1707437223

2 files

1707350803

2 files

1707264419

2 files

1707178014

2 files

1707091645

2 files

1707005259

2 files

1706918837

2 files

1706832411

2 files

1706746077

2 files

1706659614

2 files

1706573213

2 files

1706486838

2 files

1706400476

2 files

1706314006

2 files

1706227627

2 files

1706141244

2 files

1706054849

2 files

1705968451

2 files

1705882094

2 files

1705795685

2 files

1705709231

2 files

1705622846

2 files

1705536442

2 files

1705450045

2 files

1705363643

2 files

1705277283

2 files

1705190884

2 files

1705104445

2 files

1705018040

2 files

1704931650

2 files

1704845238

2 files

1704758865

2 files

1704672472

2 files

1704586092

2 files

1704499644

2 files

1704413244

2 files

1704326854

2 files

1704240438

2 files

1704154051

2 files

1704067681

2 files

1703981289

2 files

1703894825

2 files

1703808374

2 files

1703722042

2 files

1703635624

2 files

1703549219

2 files

1703462835

2 files

1703376479

2 files

1703290021

2 files

1703203632

2 files

1703117237

2 files

1703030779

2 files

1702944438

2 files

1702858055

2 files

1702771692

2 files

1702685246

2 files

1702598864

2 files

1702512431

2 files

1702426041

2 files

1702339642

2 files

1702253248

2 files

1702166879

2 files

1702080431

2 files

1701994058

2 files

1701907649

2 files

1701821247

2 files

1701734841

2 files

1701648460

2 files

1701562081

2 files

1701475614

2 files

1701389281

2 files

1701302845

2 files

1701216444

2 files

1701130152

2 files

1701043638

2 files

1700957270

2 files

1700870829

2 files

1700784425

2 files

1700698017

2 files

1700611659

2 files

1700525246

2 files

1700438853

2 files

1700352465

2 files

1700266021

2 files

1700179625

2 files

1700093244

2 files

1700006832

2 files

1699920428

2 files

1699834072

2 files

1699747654

2 files

1699661199

2 files

1699574814

2 files

1699488402

2 files

1699402020

2 files

1699315626

2 files

1699229240

2 files

1699142859

2 files

1699056397

2 files

1698970018

2 files

1698883609

2 files

1698797235

2 files

1698710815

2 files

1698624426

2 files

1698538036

2 files

1698451589

2 files

1698365200

2 files

1698278828

2 files

1698192399

2 files

1698106012

2 files

1698019631

2 files

1697933269

2 files

1697846819

2 files

1697760426

2 files

1697674012

2 files

1697587618

2 files

1697501227

2 files

1697414844

2 files

1697328453

2 files

1697242005

2 files

1697155623

2 files

1697069159

2 files

1696982804

2 files

1696896402

2 files

1696810041

2 files

1696723642

2 files

1696637206

2 files

1696550806

2 files

1696464407

2 files

1696378012

2 files

1696291616

2 files

1696205239

2 files

1696118883

2 files

1696032411

2 files

1695946020

2 files

1695859600

2 files

1695773215

2 files

1695686813

2 files

1695600423

2 files

1695514046

2 files

1695427596

2 files

1695341195

2 files

1695254802

2 files

1695168422

2 files

1695082017

2 files

1694995600

2 files

1694909238

2 files

1694822807

2 files

1694736405

2 files

1694650021

2 files

1694563597

2 files

1694477225

2 files

1694390839

2 files

1694304437

2 files

1694217999

2 files

1694131593

2 files

1694045209

2 files

1693958806

2 files

1693872398

2 files

1693786014

2 files

1693699642

2 files

1693613191

2 files

1693526829

2 files

1693440409

2 files

1693354019

2 files

1693267626

2 files

1693181229

2 files

1693094814

2 files

1693008393

2 files

1692922014

2 files

1692835597

2 files

1692749200

2 files

1692662804

2 files

1692576406

2 files

1692490013

2 files

1692403547

2 files

1692317200

2 files

1692230786

2 files

1692144416

2 files

1692058002

2 files

1691971610

2 files

1691885201

2 files

1691798774

2 files

1691712373

2 files

1691626046

2 files

1691539622

2 files

1691453247

2 files

1691366855

2 files

1691280484

2 files

1691194035

2 files

1691107662

2 files

1691021244

2 files

1690934827

2 files

1690848521

2 files

1690762052

2 files

1690675669

2 files

1690589242

2 files

1690502850

2 files

1690416438

2 files

1690330057

2 files

1690243699

2 files

1690157288

2 files

1690070877

2 files

1689984448

2 files

1689898053

2 files

1689811655

2 files

1689725346

2 files

1689639084

2 files

1689552532

2 files

1689466155

2 files

1689379694

2 files

1689293349

2 files

1689206884

2 files

1689120496

2 files

1689034117

2 files

1688947723

2 files

1688861361

2 files

1688774882

2 files

1688688489

2 files

1688602151

2 files

1688515714

2 files

1688429290

2 files

1688342899

2 files

1688256541

2 files

1688170164

2 files

1688083671

2 files

1687997315

2 files

1687910930

2 files

1687824489

2 files

1687738104

2 files

1687651739

2 files

1687565326

2 files

1687478935

2 files

1687392478

2 files

1687306044

2 files

1687219588

2 files

1687133262

2 files

1687046899

2 files

1686960437

2 files

1686874038

2 files

1686787651

2 files

1686701226

2 files

1686614860

2 files

1686528442

2 files

1686442077

2 files

1686355634

2 files

1686269234

2 files

1686182849

2 files

1686096451

2 files

1686010034

2 files

1685923637

2 files

1685837295

2 files

1685750813

2 files

1685664441

2 files

1685578118

2 files

1685491646

2 files

1685405225

2 files

1685318844

2 files

1685232483

2 files

1685146029

2 files

1685059622

2 files

1684973248

2 files

1684886820

2 files

1684800452

2 files

1684714051

2 files

1684627659

2 files

1684541208

2 files

1684454823

2 files

1684368425

2 files

1684282058

2 files

1684195626

2 files

1684109252

2 files

1684022842

2 files

1683936412

2 files

1683850002

2 files

1683763623

2 files

1683677228

2 files

1683590828

2 files

1683504424

2 files

1683418026

2 files

1683331592

2 files

1683245202

2 files

1683158806

2 files

1683072405

2 files

1682986039

2 files

1682899673

2 files

1682813260

2 files

1682726797

2 files

1682640451

2 files

1682554018

2 files

1682467628

2 files

1682381225

2 files

1682294834

2 files

1682208476

2 files

1682122021

2 files

1682035607

2 files

1681949211

2 files

1681862810

2 files

1681776438

2 files

1681690032

2 files

1681603652

2 files

1681517208

2 files

1681430811

2 files

1681344396

2 files

1681258016

2 files

1681171628

2 files

1681085229

2 files

1680998840

2 files

1680912384

2 files

1680826010

2 files

1680739624

2 files

1680653197

2 files

1680566819

2 files

1680480417

2 files

1680394088

2 files

1680307638

2 files

1680221250

2 files

1680134858

2 files

1680048492

2 files

1679962083

2 files

1679875652

2 files

1679789260

2 files

1679702816

2 files

1679616432

2 files

1679530024

2 files

1679443585

2 files

1679357223

2 files

1679270879

2 files

1679184491

2 files

1679098017

2 files

1679011635

2 files

1678925273

2 files

1678838857

2 files

1678752462

2 files

1678666064

2 files

1678579665

2 files

1678493235

2 files

1678406869

2 files

1678320460

2 files

1678234061

2 files

1678147693

2 files

1678061267

2 files

1677974941

2 files

1677888441

2 files

1677808110

2 files

1677715690

2 files

1677629316

2 files

1677542879

2 files

1677456468

2 files

1677370098

2 files

1677283670

2 files

1677197289

2 files

1677110933

2 files

1677024460

2 files

1676938060

2 files

1676851679

2 files

1676765295

2 files

1676678827

2 files

1676592494

2 files

1676506081

2 files

1676419705

2 files

1676333320

2 files

1676246865

2 files

1676160469

2 files

1676074032

2 files

1675987685

2 files

1675901295

2 files

1675814842

2 files

1675728503

2 files

1675642065

2 files

1675555678

2 files

1675469213

2 files

1675382820

2 files

1675296434

2 files

1675210082

2 files

1675123680

2 files

1675037260

2 files

1674950867

2 files

1674864404

2 files

1674778045

2 files

1674691644

2 files

1674607697

2 files

1674521563

2 files

1674434844

2 files

1674348756

2 files

1674262244

2 files

1674175852

2 files

1674089495

2 files

1674003137

2 files

1673916545

2 files

1673830117

2 files

1673743943

2 files

1673657181

2 files

1673571039

2 files

1673484666

2 files

1673398164

2 files

1673311924

2 files

1673225336

2 files

1673139140

2 files

1673052412

2 files

1672966191

2 files

1672879841

2 files

1672793314

2 files

1672706861

2 files

1672620459

2 files

1672534517

2 files

1672447561

2 files

1672361290

2 files

1672274898

2 files

1672188370

2 files

1672101992

2 files

1672015630

2 files

1671929390

2 files

1671842511

2 files

1671756320

2 files

1671670034

2 files

1671583435

2 files

1671497351

2 files

1671410630

2 files

1671324321

2 files

1671237831

2 files

1671151601

2 files

1671065500

2 files

1670979049

2 files

1670892818

2 files

1670806319

2 files

1670720049

2 files

1670633172

2 files

1670547040

2 files

1670460472

2 files

1670374300

2 files

1670287687

2 files

1670201305

2 files

1670114976

2 files

1670028379

2 files

1669942183

2 files

1669856303

2 files

1669769635

2 files

1669683187

2 files

1669596637

2 files

1669510620

2 files

1669423685

2 files

1669337591

2 files

1669251448

2 files

1669164727

2 files

1669078732

2 files

1668992292

2 files

1668906034

2 files

1668819521

2 files

1668733248

2 files

1668646650

2 files

1668560283

2 files

1668473869

2 files

1668387547

2 files

1668301095

2 files

1668214799

2 files

1668128600

2 files

1668042058

2 files

1667955624

2 files

1667869172

2 files

1667782738

2 files

1667696470

2 files

1667610188

2 files

1667523834

2 files

1667437367

2 files

1667351310

2 files

1667265302

2 files

1667178697

2 files

1667092225

2 files

1667005063

2 files

1666919336

2 files

1666832632

2 files

1666746236

2 files

1666660761

2 files

1666574593

2 files

1666487515

2 files

1666401306

2 files

1666314472

2 files

1666228202

2 files

1666142031

2 files

1666055585

2 files

1665969551

2 files

1665883024

2 files

1665796427

2 files

1665710463

2 files

1665623456

2 files

1665537639

2 files

1665450370

2 files

1665364399

2 files

1665277726

2 files

1665190981

2 files

1665105548

2 files

1665018511

2 files

1664932467

2 files

1664846168

2 files

1664759259

2 files

1664673459

2 files

1664587380

2 files

1664501231

2 files

1664414083

2 files

1664327392

2 files

1664241004

2 files

1664154437

2 files

1664067934

2 files

1663981898

2 files

1663895459

2 files

1663808741

2 files

1663722640

2 files

1663636089

2 files

1663549549

2 files

1663463417

2 files

1663376650

2 files

1663290525

2 files

1663204229

2 files

1663117450

2 files

1663031194

2 files

1662944741

2 files

1662858396

2 files

1662771941

2 files

1662685656

2 files

1662599081

2 files

1662512972

2 files

1662426334

2 files

1662340396

2 files

1662253272

2 files

1662166847

2 files

1662080532

2 files

1661993942

2 files

1661908361

2 files

1661821741

2 files

1661735211

2 files

1661648578

2 files

1661561822

2 files

1661475810

2 files

1661389719

2 files

1661303067

2 files

1661216867

2 files

1661130007

2 files

1661043522

2 files

1660956998

2 files

1660870868

2 files

1660784605

2 files

1660698279

2 files

1660612023

2 files

1660525229

2 files

1660438752

2 files

1660352059

2 files

1660265792

2 files

1660179407

2 files

1660093190

2 files

1660006911

2 files

1659920109

2 files

1659834187

2 files

1659747376

2 files

1659661637

2 files

1659574966

2 files

1659488552

2 files

1659402249

2 files

1659316090

2 files

1659229280

2 files

1659142548

2 files

1659056458

2 files

1658969949

2 files

1658883739

2 files

1658797265

2 files

1658710691

2 files

1658624572

2 files

1658537935

2 files

1658451799

2 files

1658365224

2 files

1658278500

2 files

1658192822

2 files

1658105889

2 files

1658019701

2 files

1657933164

2 files

1657847112

2 files

1657760476

2 files

1657673844

2 files

1657587653

2 files

1657501101

2 files

1657415005

2 files

1657327858

2 files

1657242074

2 files

1657155635

2 files

1657069440

2 files

1656982630

2 files

1656896507

2 files

1656809964

2 files

1656723419

2 files

1656637364

2 files

1656550414

2 files

1656464195

2 files

1656377999

2 files

1656291616

2 files

1656205137

2 files

1656118488

2 files

1656032105

2 files

1655945351

2 files

1655859675

2 files

1655772963

2 files

1655686630

2 files

1655600105

2 files

1655513699

2 files

1655427341

2 files

1655340930

2 files

1655254651

2 files

1655168520

2 files

1655081811

2 files

1654995420

2 files

1654908711

2 files

1654822587

2 files

1654736030

2 files

1654649563

2 files

1654562702

2 files

1654476888

2 files

1654390648

2 files

1654303872

2 files

1654217223

2 files

1654131595

2 files

1654045307

2 files

1653958575

2 files

1653872345

2 files

1653785740

2 files

1653699166

2 files

1653612785

2 files

1653526649

2 files

1653440161

2 files

1653353865

2 files

1653267070

2 files

1653180729

2 files

1653094086

2 files

1653008135

2 files

1652922087

2 files

1652834623

2 files

1652748793

2 files

1652662514

2 files

1652576760

2 files

1652490127

2 files

1652403685

2 files

1652316903

2 files

1652230733

2 files

1652143848

2 files

1652057684

2 files

1651971064

2 files

1651884532

2 files

1651798018

2 files

1651712085

2 files

1651625690

2 files

1651539345

2 files

1651452724

2 files

1651367001

2 files

1651280253

2 files

1651193507

2 files

1651108153

2 files

1651021163

2 files

1650934374

2 files

1650847781

2 files

1650761235

2 files

1650674872

2 files

1650588846

2 files

1650502381

2 files

1650416231

2 files

1650329839

2 files

1650243367

2 files

1650156658

2 files

1650070035

2 files

1649983774

2 files

1649897654

2 files

1649811087

2 files

1649724270

2 files

1649638056

2 files

1649551649

2 files

1649465050

2 files

1649378873

2 files

1649292420

2 files

1649206146

2 files

1649119441

2 files

1649033149

2 files

1648946878

2 files

1648860197

2 files

1648774347

2 files

1648687476

2 files

1648601056

2 files

1648514902

2 files

1648428279

2 files

1648342059

2 files

1648255327

2 files

1648168889

2 files

1648082666

2 files

1647996469

2 files

1647909840

2 files

1647823271

2 files

1647736879

2 files

1647650392

2 files

1647564085

2 files

1647477767

2 files

1647391347

2 files

1647304938

2 files

1647218547

2 files

1647131960

2 files

1647045489

2 files

1646959419

2 files

1646872941

2 files

1646786412

2 files

1646699936

2 files

1646613625

2 files

1646527229

2 files

1646440965

2 files

1646354668

2 files

1646268091

2 files

1646181708

2 files

1646095411

2 files

1646008809

2 files

1645922471

2 files

1645835799

2 files

1645749588

2 files

1645663160

2 files

1645576907

2 files

1645490214

2 files

1645403807

2 files

1645317725

2 files

1645231142

2 files

1645144768

2 files

1645057936

2 files

1644971664

2 files

1644885477

2 files

1644798817

2 files

1644712669

2 files

1644626243

2 files

1644539848

2 files

1644453283

2 files

1644367014

2 files

1644280461

2 files

1644194019

2 files

1644107867

2 files

1644020861

2 files

1643934800

2 files

1643848358

2 files

1643762123

2 files

1643675648

2 files

1643589148

2 files

1643502802

2 files

1643416229

2 files

1643329929

2 files

1643243553

2 files

1643157394

2 files

1643070973

2 files

1642984314

2 files

1642897948

2 files

1642811499

2 files

1642725096

2 files

1642639103

2 files

1642552288

2 files

1642466214

2 files

1642379704

2 files

1642293398

2 files

1642206848

2 files

1642120497

2 files

1642034228

2 files

1641947728

2 files

1641861379

2 files

1641774900

2 files

1641688565

2 files

1641602076

2 files

1641515863

2 files

1641429390

2 files

1641342985

2 files

1641256461

2 files

1641170025

2 files

1641083717

2 files

1640997296

2 files

1640910892

2 files

1640824402

2 files

1640737975

2 files

1640651612

2 files

1640565257

2 files

1640478945

2 files

1640392348

2 files

1640305970

2 files

1640219627

2 files

1640133274

2 files

1640046943

2 files

1639960459

2 files

1639874141

2 files

1639787656

2 files

1639701326

2 files

1639614758

2 files

1639528340

2 files

1639442101

2 files

1639355587

2 files

1639269287

2 files

1639182648

2 files

1639096394

2 files

1639009944

2 files

1638923634

2 files

1638837208

2 files

1638750793

2 files

1638664463

2 files

1638577901

2 files

1638491496

2 files

1638405082

2 files

1638318815

2 files

1638232438

2 files

1638145892

2 files

1638059536

2 files

1637973006

2 files

1637886640

2 files

1637800299

2 files

1637713870

2 files

1637627438

2 files

1637541080

2 files

1637454741

2 files

1637368222

2 files

1637281855

2 files

1637195499

2 files

1637109055

2 files

1637022636

2 files

1636936252

2 files

1636849902

2 files

1636763396

2 files

1636677123

2 files

1636590649

2 files

1636504260

2 files

1636417841

2 files

1636331462

2 files

1636245095

2 files

1636158561

2 files

1636072221

2 files

1635985820

2 files

1635899424

2 files

1635813145

2 files

1635726737

2 files

1635640311

2 files

1635553765

2 files

1635467369

2 files

1635381025

2 files

1635294610

2 files

1635208173

2 files

1635121965

2 files

1635035495

2 files

1634949189

2 files

1634862942

2 files

1634776483

2 files

1634689928

2 files

1634603492

2 files

1634517100

2 files

1634430667

2 files

1634344410

2 files

1634257885

2 files

1634171358

2 files

1634085056

2 files

1633998736

2 files

1633912283

2 files

1633825929

2 files

1633739352

2 files

1633653129

2 files

1633566722

2 files

1633480330

2 files

1633393885

2 files

1633307653

2 files

1633221155

2 files

1633134605

2 files

1633048397

2 files

1632961985

2 files

1632875349

2 files

1632789022

2 files

1632702557

2 files

1632616314

2 files

1632529767

2 files

1632443381

2 files

1632357045

2 files

1632270628

2 files

1632184102

2 files

1632098005

2 files

1632011420

2 files

1631924840

2 files

1631838768

2 files

1631752240

2 files

1631665727

2 files

1631579439

2 files

1631493075

2 files

1631406664

2 files

1631320103

2 files

1631233906

2 files

1631147417

2 files

1631060860

2 files

1630974437

2 files

1630888303

2 files

1630801798

2 files

1630715246

2 files

1630628826

2 files

1630542475

2 files

1630456187

2 files

1630369786

2 files

1630283326

2 files

1630196971

2 files

1630110379

2 files

1630024237

2 files

1629937605

2 files

1629851286

2 files

1629764821

2 files

1629678356

2 files

1629592046

2 files

1629505666

2 files

1629419229

2 files

1629332673

2 files

1629246462

2 files

1629160084

2 files

1629073709

2 files

1628987285

2 files

1628900771

2 files

1628814511

2 files

1628728122

2 files

1628641978

2 files

1628555348

2 files

1628468956

2 files

1628382496

2 files

1628295940

2 files

1628209728

2 files

1628123348

2 files

1628036774

2 files

1627950833

2 files

1627864044

2 files

1627777862

2 files

1627691204

2 files

1627604874

2 files

1627518515

2 files

1627432122

2 files

1627345631

2 files

1627259213

2 files

1627172834

2 files

1627086358

2 files

1627000091

2 files

1626913672

2 files

1626827349

2 files

1626740864

2 files

1626654457

2 files

1626568052

2 files

1626481628

2 files

1626395234

2 files

1626308719

2 files

1626222315

2 files

1626136132

2 files

1626049655

2 files

1625963246

2 files

1625876791

2 files

1625790510

2 files

1625703940

2 files

1625617664

2 files

1625531248

2 files

1625444690

2 files

1625358372

2 files

1625272033

2 files

1625185574

2 files

1625099314

2 files

1625012859

2 files

1624926398

2 files

1624840119

2 files

1624753769

2 files

1624667089

2 files

1624580977

2 files

1624494011

2 files

1624407942

2 files

1624321516

2 files

1624235231

2 files

1624148890

2 files

1624062412

2 files

1623975971

2 files

1623889502

2 files

1623803269

2 files

1623716820

2 files

1623630334

2 files

1623544129

2 files

1623457409

2 files

1623371219

2 files

1623284967

2 files

1623198618

2 files

1623113263

2 files

1623026770

2 files

1622940382

2 files

1622854424

2 files

1622769256

2 files

1622683198

2 files

1622598026

2 files

1622511138

2 files

1622423660

2 files

1622336698

2 files

1622249934

2 files

1622163017

2 files

1622076218

2 files

1621989682

2 files

1621902865

2 files

1621816473

2 files

1621730177

2 files

1621643564

2 files

1621557166

2 files

1621470652

2 files

1621384323

2 files

1621298089

2 files

1621211477

2 files

1621125292

2 files

1621038654

2 files

1620952400

2 files

1620865987

2 files

1620778981

2 files

1620692501

2 files

1620606130

2 files

1620519826

2 files

1620433289

2 files

1620346885

2 files

1620260414

2 files

1620174044

2 files

1620087982

2 files

1620001909

2 files

1619915649

2 files

1619829058

2 files

1619742579

2 files

1619654863

2 files

1619568453

2 files

1619482044

2 files

1619395708

2 files

1619309286

2 files

1619222904

2 files

1619136458

2 files

1619050100

2 files

1618963671

2 files

1618877275

2 files

1618790859

2 files

1618704461

2 files

1618618046

2 files

1618531617

2 files

1618445280

2 files

1618358830

2 files

1618272533

2 files

1618186102

2 files

1618099735

2 files

1618013283

2 files

1617926886

2 files

1617840584

2 files

1617754074

2 files

1617667699

2 files

1617581324

2 files

1617494903

2 files

1617408451

2 files

1617322433

2 files

1617235698

2 files

1617149189

2 files

1617062833

2 files

1616976752

2 files

1616890200

2 files

1616803625

2 files

1616717397

2 files

1616630974

2 files

1616545117

2 files

1616458694

2 files

1616372308

2 files

1616285944

2 files

1616199473

2 files

1616113105

2 files

1616026701

2 files

1615940280

2 files

1615853861

2 files

1615767494

2 files

1615681114

2 files

1615594667

2 files

1615508277

2 files

1615421858

2 files

1615335459

2 files

1615249056

2 files

1615162675

2 files

1615076320

2 files

1614989847

2 files

1614903472

2 files

1614817060

2 files

1614730635

2 files

1614644095

2 files

1614557911

2 files

1614471497

2 files

1614385036

2 files

1614298633

2 files

1614212215

2 files

1614125829

2 files

1614039414

2 files

1613953038

2 files

1613866655

2 files

1613780195

2 files

1613693811

2 files

1613607435

2 files

1613521010

2 files

1613434616

2 files

1613348214

2 files

1613261841

2 files

1613175384

2 files

1613088998

2 files

1613002623

2 files

1612916196

2 files

1612829786

2 files

1612743394

2 files

1612657017

2 files

1612570574

2 files

1612484193

2 files

1612397807

2 files

1612311453

2 files

1612225337

2 files

1612138939

2 files

1612052513

2 files

1611966052

2 files

1611879680

2 files

1611793334

2 files

1611706807

2 files

1611620543

2 files

1611535788

2 files

1611449360

2 files

1611363038

2 files

1611276617

2 files

1611190332

2 files

1611103954

2 files

1611017454

2 files

1610930854

2 files

1610844520

2 files

1610758284

2 files

1610671708

2 files

1610585585

2 files

1610498713

2 files

1610411938

2 files

1610325346

2 files

1610239018

2 files

1610152489

2 files

1610066099

2 files

1609979734

2 files

1609893144

2 files

1609806725

2 files

1609720312

2 files

1609633838

2 files

1609547349

2 files

1609461003

2 files

1609374653

2 files

1609288134

2 files

1609201649

2 files

1609115171

2 files

1609028749

2 files

1608942257

2 files

1608855957

2 files

1608769720

2 files

1608683126

2 files

1608596623

2 files

1608510136

2 files

1608423589

2 files

1608337208

2 files

1608250817

2 files

1608164443

2 files

1608077924

2 files

1607991527

2 files

1607905141

2 files

1607818766

2 files

1607732311

2 files

1607645915

2 files

1607559495

2 files

1607473085

2 files

1607386685

2 files

1607300302

2 files

1607213903

2 files

1607127439

2 files

1607041020

2 files

1606954627

2 files

1606868229

2 files

1606781851

2 files

1606695436

2 files

1606609042

2 files

1606522575

2 files

1606436191

2 files

1606349727

2 files

1606263343

2 files

1606176939

2 files

1606090557

2 files

1606004165

2 files

1605917702

2 files

1605831310

2 files

1605744886

2 files

1605658487

2 files

1605572066

2 files

1605485679

2 files

1605399284

2 files

1605312836

2 files

1605226438

2 files

1605140022

2 files

1605053493

2 files

1604967307

2 files

1604880911

2 files

1604794525

2 files

1604708073

2 files

1604621648

2 files

1604535237

2 files

1604448806

2 files

1604362410

2 files

1604275992

2 files

1604189645

2 files

1604103141

2 files

1604016820

2 files

1603930952

2 files

1603844534

2 files

1603758123

2 files

1603671729

2 files

1603585341

2 files

1603498891

2 files

1603412490

2 files

1603326082

2 files

1603239666

2 files

1603153250

2 files

1603066870

2 files

1602980470

2 files

1602894024

2 files

1602807635

2 files

1602721211

2 files

1602634806

2 files

1602548399

2 files

1602462005

2 files

1602375626

2 files

1602289163

2 files

1602202738

2 files

1602116160

2 files

1602029957

2 files

1601943541

2 files

1601857149

2 files

1601770773

2 files

1601684325

2 files

1601597870

2 files

1601511539

2 files

1601425090

2 files

1601338699

2 files

1601252312

2 files

1601165926

2 files

1601079464

2 files

1600993085

2 files

1600906685

2 files

1600820258

2 files

1600733876

2 files

1600647492

2 files

1600561105

2 files

1600474635

2 files

1600388274

2 files

1600301838

2 files

1600215428

2 files

1600042640

2 files

1599956258

2 files

1599869812

2 files

1599783414

2 files

1599696997

2 files

1599610605

2 files

1599524214

2 files

1599437835

2 files

1599351436

2 files

1599265580

2 files

1599178608

2 files

1599092186

2 files

1599005784

2 files

1598919479

2 files

1598832930

2 files

1598746541

2 files

1598659832

2 files

1598573809

2 files

1598487309

2 files

1598400899

2 files

1598314633

2 files

1598228116

2 files

1598141734

2 files

1598055307

2 files

1597968876

2 files

1597882472

2 files

1597796166

2 files

1597709653

2 files

1597623279

2 files

1597536872

2 files

1597450436

2 files

1597364042

2 files

1597277647

2 files

1597191252

2 files

1597104851

2 files

1597018462

2 files

1596932079

2 files

1596845620

2 files

1596759238

2 files

1596672818

2 files

1596586421

2 files

1596500029

2 files

1596413628

2 files

1596327220

2 files

1596240829

2 files

1596154395

2 files

1596068003

2 files

1595981539

2 files

1595895158

2 files

1595808776

2 files

1595722379

2 files

1595635975

2 files

1595549573

2 files

1595463138

2 files

1595376716

2 files

1595290330

2 files

1595203963

2 files

1595117549

2 files

1595031127

2 files

1594944746

2 files

1594858328

2 files

1594771947

2 files

1594685529

2 files

1594599157

2 files

1594512757

2 files

1594426325

2 files

1594339918

2 files

1594253508

2 files

1594167092

2 files

1594080695

2 files

1593994317

2 files

1593907929

2 files

1593821493

2 files

1593735104

2 files

1593648695

2 files

1593562298

2 files

1593475788

2 files

1593389387

2 files

1593302977

2 files

1593216560

2 files

1593130180

2 files

1593043763

2 files

1592957346

2 files

1592870950

2 files

1592784541

2 files

1592698182

2 files

1592611739

2 files

1592525375

2 files

1592438969

2 files

1592352551

2 files

1592266142

2 files

1592179743

2 files

1592093367

2 files

1592006964

2 files

1591920561

2 files

1591834135

2 files

1591747766

2 files

1591661327

2 files

1591574956

2 files

1591488556

2 files

1591402101

2 files

1591315743

2 files

1591229317

2 files

1591142941

2 files

1591056524

2 files

1590970147

2 files

1590883710

2 files

1590797302

2 files

1590710920

2 files

1590624718

2 files

1590538243

2 files

1590451822

2 files

1590365442

2 files

1590279043

2 files

1590192621

2 files

1590105949

2 files

1590019555

2 files

1589933142

2 files

1589846752

2 files

1589760328

2 files

1589673959

2 files

1589587548

2 files

1589501130

2 files

1589414746

2 files

1589328328

2 files

1589242051

2 files

1589155524

2 files

1589069113

2 files

1588982672

2 files

1588896286

2 files

1588809902

2 files

1588723497

2 files

1588637136

2 files

1588550692

2 files

1588464297

2 files

1588377895

2 files

1588291500

2 files

1588205077

2 files

1588118680

2 files

1588032285

2 files

1587945892

2 files

1587859471

2 files

1587773074

2 files

1587686685

2 files

1587600281

2 files

1587513886

2 files

1587427491

2 files

1587341086

2 files

1587254684

2 files

1587168277

2 files

1587081870

2 files

1586995478

2 files

1586909099

2 files

1586822901

2 files

1586736280

2 files

1586649893

2 files

1586563481

2 files

1586477123

2 files

1586390674

2 files

1586304295

2 files

1586217870

2 files

1586131461

2 files

1586045052

2 files

1585958676

2 files

1585872276

2 files

1585785889

2 files

1585699497

2 files

1585613082

2 files

1585526689

2 files

1585440289

2 files

1585353878

2 files

1585267485

2 files

1585181071

2 files

1585094667

2 files

1585008276

2 files

1584921868

2 files

1584835478

2 files

1584749077

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page