// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package icons;

import com.intellij.ui.IconManager;
import org.jetbrains.annotations.NotNull;

import javax.swing.*;

/**
 * NOTE THIS FILE IS AUTO-GENERATED
 * DO NOT EDIT IT BY HAND, run "Generate icon classes" configuration instead
 */
public final class PythonIcons {
  private static @NotNull Icon load(@NotNull String path) {
    return IconManager.getInstance().getIcon(path, PythonIcons.class);
  }


  public final static class Cython {
    /** 16x16 */ public static final @NotNull Icon CythonFile = load("/icons/com/jetbrains/cython/cythonFile.svg");

  }

  public final static class Pyqt {
    /** 16x16 */ public static final @NotNull Icon UiForm = load("/icons/com/jetbrains/pyqt/uiForm.svg");

  }

  public final static class Python {
    /** 16x16 */ public static final @NotNull Icon Anaconda = load("/icons/com/jetbrains/python/anaconda.svg");

    public final static class Buildout {
      /** 16x16 */ public static final @NotNull Icon Buildout = load("/icons/com/jetbrains/python/buildout/buildout.svg");

    }
    /** 16x16 */ public static final @NotNull Icon Condaenv = load("/icons/com/jetbrains/python/condaenv.svg");
    /** 13x13 */ public static final @NotNull Icon DataView = load("/icons/com/jetbrains/python/DataView.svg");

    public final static class Debug {
      /** 16x16 */ public static final @NotNull Icon SpecialVar = load("/icons/com/jetbrains/python/debug/specialVar.svg");
      /** 16x16 */ public static final @NotNull Icon StepIntoMyCode = load("/icons/com/jetbrains/python/debug/StepIntoMyCode.svg");

    }
    /** 16x16 */ public static final @NotNull Icon Dotnet = load("/icons/com/jetbrains/python/dotnet.svg");
    /** 16x16 */ public static final @NotNull Icon Function = load("/icons/com/jetbrains/python/function.svg");
    /** 16x16 */ public static final @NotNull Icon IpythonNotebook = load("/icons/com/jetbrains/python/IpythonNotebook.svg");
    /** 16x16 */ public static final @NotNull Icon Jython = load("/icons/com/jetbrains/python/jython.svg");
    /** 16x16 */ public static final @NotNull Icon Pypy = load("/icons/com/jetbrains/python/pypy.svg");
    /** 16x16 */ public static final @NotNull Icon Python = load("/icons/com/jetbrains/python/python.svg");
    /** 16x16 */ public static final @NotNull Icon PythonClosed = load("/icons/com/jetbrains/python/pythonClosed.svg");
    /** 16x16 */ public static final @NotNull Icon PythonConsole = load("/icons/com/jetbrains/python/pythonConsole.svg");
    /** 13x13 */ public static final @NotNull Icon PythonConsoleToolWindow = load("/icons/com/jetbrains/python/pythonConsoleToolWindow.svg");
    /** 16x16 */ public static final @NotNull Icon PythonTests = load("/icons/com/jetbrains/python/pythonTests.svg");
    /** 16x16 */ public static final @NotNull Icon RemoteInterpreter = load("/icons/com/jetbrains/python/RemoteInterpreter.svg");
    /** 16x16 */ public static final @NotNull Icon Ssh = load("/icons/com/jetbrains/python/ssh.svg");
    /** 16x16 */ public static final @NotNull Icon TemplateRoot = load("/icons/com/jetbrains/python/templateRoot.svg");
    /** 16x16 */ public static final @NotNull Icon Vagrant = load("/icons/com/jetbrains/python/vagrant.svg");
    /** 16x16 */ public static final @NotNull Icon Virtualenv = load("/icons/com/jetbrains/python/virtualenv.svg");

  }
}
