/**
 * Copyright (c) 2020 CEA LIST
 * 
 * All rights reserved. This program and the accompanying materials are
 * made available under the terms of the Eclipse Public License v2.0 which
 * accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 * 
 * SPDX-License-Identifier: EPL-2.0
 * 
 */
package org.eclipse.papyrus.aiml.profile.AIML.Vision_layers.impl;

import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EcorePackage;

import org.eclipse.emf.ecore.impl.EPackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.AIMLPackage;

import org.eclipse.papyrus.aiml.profile.AIML.Convolution_layers.Convolution_layersPackage;

import org.eclipse.papyrus.aiml.profile.AIML.Convolution_layers.impl.Convolution_layersPackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.DataParallel_layers.DataParallel_layersPackage;

import org.eclipse.papyrus.aiml.profile.AIML.DataParallel_layers.impl.DataParallel_layersPackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.Distance_functions.Distance_functionsPackage;

import org.eclipse.papyrus.aiml.profile.AIML.Distance_functions.impl.Distance_functionsPackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.Dropout_layers.Dropout_layersPackage;

import org.eclipse.papyrus.aiml.profile.AIML.Dropout_layers.impl.Dropout_layersPackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.Layer_weight_constraints.Layer_weight_constraintsPackage;

import org.eclipse.papyrus.aiml.profile.AIML.Layer_weight_constraints.impl.Layer_weight_constraintsPackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.Layer_weight_initializers.Layer_weight_initializersPackage;

import org.eclipse.papyrus.aiml.profile.AIML.Layer_weight_initializers.impl.Layer_weight_initializersPackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.Layer_weight_regularizers.Layer_weight_regularizersPackage;

import org.eclipse.papyrus.aiml.profile.AIML.Layer_weight_regularizers.impl.Layer_weight_regularizersPackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.Linear_layers.Linear_layersPackage;

import org.eclipse.papyrus.aiml.profile.AIML.Linear_layers.impl.Linear_layersPackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.Loss_functions.Loss_functionsPackage;

import org.eclipse.papyrus.aiml.profile.AIML.Loss_functions.impl.Loss_functionsPackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.Module.ModulePackage;

import org.eclipse.papyrus.aiml.profile.AIML.Module.impl.ModulePackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.NonLinearActivations.NonLinearActivationsPackage;

import org.eclipse.papyrus.aiml.profile.AIML.NonLinearActivations.impl.NonLinearActivationsPackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.Normalization_layers.Normalization_layersPackage;

import org.eclipse.papyrus.aiml.profile.AIML.Normalization_layers.impl.Normalization_layersPackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.Padding_layers.Padding_layersPackage;

import org.eclipse.papyrus.aiml.profile.AIML.Padding_layers.impl.Padding_layersPackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.Pooling_layers.Pooling_layersPackage;

import org.eclipse.papyrus.aiml.profile.AIML.Pooling_layers.impl.Pooling_layersPackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.Recurrent_layers.Recurrent_layersPackage;

import org.eclipse.papyrus.aiml.profile.AIML.Recurrent_layers.impl.Recurrent_layersPackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.SoftMinMaxActivations.SoftMinMaxActivationsPackage;

import org.eclipse.papyrus.aiml.profile.AIML.SoftMinMaxActivations.impl.SoftMinMaxActivationsPackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.Sparse_layers.Sparse_layersPackage;

import org.eclipse.papyrus.aiml.profile.AIML.Sparse_layers.impl.Sparse_layersPackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.Tensor.TensorPackage;

import org.eclipse.papyrus.aiml.profile.AIML.Tensor.impl.TensorPackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.Transformer_layers.Transformer_layersPackage;

import org.eclipse.papyrus.aiml.profile.AIML.Transformer_layers.impl.Transformer_layersPackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.Vision_layers.PixelShuffle;
import org.eclipse.papyrus.aiml.profile.AIML.Vision_layers.Upsample;
import org.eclipse.papyrus.aiml.profile.AIML.Vision_layers.UpsamplingBilinear2d;
import org.eclipse.papyrus.aiml.profile.AIML.Vision_layers.UpsamplingNearest2d;
import org.eclipse.papyrus.aiml.profile.AIML.Vision_layers.Vision_layers;
import org.eclipse.papyrus.aiml.profile.AIML.Vision_layers.Vision_layersFactory;
import org.eclipse.papyrus.aiml.profile.AIML.Vision_layers.Vision_layersPackage;
import org.eclipse.papyrus.aiml.profile.AIML.Vision_layers.Vision_layers_1;

import org.eclipse.papyrus.aiml.profile.AIML.datatypes.DatatypesPackage;

import org.eclipse.papyrus.aiml.profile.AIML.datatypes.impl.DatatypesPackageImpl;

import org.eclipse.papyrus.aiml.profile.AIML.impl.AIMLPackageImpl;

import org.eclipse.uml2.types.TypesPackage;

import org.eclipse.uml2.uml.UMLPackage;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model <b>Package</b>.
 * <!-- end-user-doc -->
 * @generated
 */
public class Vision_layersPackageImpl extends EPackageImpl implements Vision_layersPackage {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass vision_layersEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass vision_layers_1EClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass pixelShuffleEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass upsampleEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass upsamplingNearest2dEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass upsamplingBilinear2dEClass = null;

	/**
	 * Creates an instance of the model <b>Package</b>, registered with
	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
	 * package URI value.
	 * <p>Note: the correct way to create the package is via the static
	 * factory method {@link #init init()}, which also performs
	 * initialization of the package, or returns the registered package,
	 * if one already exists.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see org.eclipse.emf.ecore.EPackage.Registry
	 * @see org.eclipse.papyrus.aiml.profile.AIML.Vision_layers.Vision_layersPackage#eNS_URI
	 * @see #init()
	 * @generated
	 */
	private Vision_layersPackageImpl() {
		super(eNS_URI, Vision_layersFactory.eINSTANCE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private static boolean isInited = false;

	/**
	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
	 *
	 * <p>This method is used to initialize {@link Vision_layersPackage#eINSTANCE} when that field is accessed.
	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #eNS_URI
	 * @see #createPackageContents()
	 * @see #initializePackageContents()
	 * @generated
	 */
	public static Vision_layersPackage init() {
		if (isInited) return (Vision_layersPackage)EPackage.Registry.INSTANCE.getEPackage(Vision_layersPackage.eNS_URI);

		// Obtain or create and register package
		Object registeredVision_layersPackage = EPackage.Registry.INSTANCE.get(eNS_URI);
		Vision_layersPackageImpl theVision_layersPackage = registeredVision_layersPackage instanceof Vision_layersPackageImpl ? (Vision_layersPackageImpl)registeredVision_layersPackage : new Vision_layersPackageImpl();

		isInited = true;

		// Initialize simple dependencies
		EcorePackage.eINSTANCE.eClass();
		TypesPackage.eINSTANCE.eClass();
		UMLPackage.eINSTANCE.eClass();

		// Obtain or create and register interdependencies
		Object registeredPackage = EPackage.Registry.INSTANCE.getEPackage(AIMLPackage.eNS_URI);
		AIMLPackageImpl theAIMLPackage = (AIMLPackageImpl)(registeredPackage instanceof AIMLPackageImpl ? registeredPackage : AIMLPackage.eINSTANCE);
		registeredPackage = EPackage.Registry.INSTANCE.getEPackage(ModulePackage.eNS_URI);
		ModulePackageImpl theModulePackage = (ModulePackageImpl)(registeredPackage instanceof ModulePackageImpl ? registeredPackage : ModulePackage.eINSTANCE);
		registeredPackage = EPackage.Registry.INSTANCE.getEPackage(TensorPackage.eNS_URI);
		TensorPackageImpl theTensorPackage = (TensorPackageImpl)(registeredPackage instanceof TensorPackageImpl ? registeredPackage : TensorPackage.eINSTANCE);
		registeredPackage = EPackage.Registry.INSTANCE.getEPackage(DatatypesPackage.eNS_URI);
		DatatypesPackageImpl theDatatypesPackage = (DatatypesPackageImpl)(registeredPackage instanceof DatatypesPackageImpl ? registeredPackage : DatatypesPackage.eINSTANCE);
		registeredPackage = EPackage.Registry.INSTANCE.getEPackage(Pooling_layersPackage.eNS_URI);
		Pooling_layersPackageImpl thePooling_layersPackage = (Pooling_layersPackageImpl)(registeredPackage instanceof Pooling_layersPackageImpl ? registeredPackage : Pooling_layersPackage.eINSTANCE);
		registeredPackage = EPackage.Registry.INSTANCE.getEPackage(Convolution_layersPackage.eNS_URI);
		Convolution_layersPackageImpl theConvolution_layersPackage = (Convolution_layersPackageImpl)(registeredPackage instanceof Convolution_layersPackageImpl ? registeredPackage : Convolution_layersPackage.eINSTANCE);
		registeredPackage = EPackage.Registry.INSTANCE.getEPackage(Layer_weight_constraintsPackage.eNS_URI);
		Layer_weight_constraintsPackageImpl theLayer_weight_constraintsPackage = (Layer_weight_constraintsPackageImpl)(registeredPackage instanceof Layer_weight_constraintsPackageImpl ? registeredPackage : Layer_weight_constraintsPackage.eINSTANCE);
		registeredPackage = EPackage.Registry.INSTANCE.getEPackage(Padding_layersPackage.eNS_URI);
		Padding_layersPackageImpl thePadding_layersPackage = (Padding_layersPackageImpl)(registeredPackage instanceof Padding_layersPackageImpl ? registeredPackage : Padding_layersPackage.eINSTANCE);
		registeredPackage = EPackage.Registry.INSTANCE.getEPackage(NonLinearActivationsPackage.eNS_URI);
		NonLinearActivationsPackageImpl theNonLinearActivationsPackage = (NonLinearActivationsPackageImpl)(registeredPackage instanceof NonLinearActivationsPackageImpl ? registeredPackage : NonLinearActivationsPackage.eINSTANCE);
		registeredPackage = EPackage.Registry.INSTANCE.getEPackage(SoftMinMaxActivationsPackage.eNS_URI);
		SoftMinMaxActivationsPackageImpl theSoftMinMaxActivationsPackage = (SoftMinMaxActivationsPackageImpl)(registeredPackage instanceof SoftMinMaxActivationsPackageImpl ? registeredPackage : SoftMinMaxActivationsPackage.eINSTANCE);
		registeredPackage = EPackage.Registry.INSTANCE.getEPackage(Normalization_layersPackage.eNS_URI);
		Normalization_layersPackageImpl theNormalization_layersPackage = (Normalization_layersPackageImpl)(registeredPackage instanceof Normalization_layersPackageImpl ? registeredPackage : Normalization_layersPackage.eINSTANCE);
		registeredPackage = EPackage.Registry.INSTANCE.getEPackage(Recurrent_layersPackage.eNS_URI);
		Recurrent_layersPackageImpl theRecurrent_layersPackage = (Recurrent_layersPackageImpl)(registeredPackage instanceof Recurrent_layersPackageImpl ? registeredPackage : Recurrent_layersPackage.eINSTANCE);
		registeredPackage = EPackage.Registry.INSTANCE.getEPackage(Transformer_layersPackage.eNS_URI);
		Transformer_layersPackageImpl theTransformer_layersPackage = (Transformer_layersPackageImpl)(registeredPackage instanceof Transformer_layersPackageImpl ? registeredPackage : Transformer_layersPackage.eINSTANCE);
		registeredPackage = EPackage.Registry.INSTANCE.getEPackage(Linear_layersPackage.eNS_URI);
		Linear_layersPackageImpl theLinear_layersPackage = (Linear_layersPackageImpl)(registeredPackage instanceof Linear_layersPackageImpl ? registeredPackage : Linear_layersPackage.eINSTANCE);
		registeredPackage = EPackage.Registry.INSTANCE.getEPackage(Dropout_layersPackage.eNS_URI);
		Dropout_layersPackageImpl theDropout_layersPackage = (Dropout_layersPackageImpl)(registeredPackage instanceof Dropout_layersPackageImpl ? registeredPackage : Dropout_layersPackage.eINSTANCE);
		registeredPackage = EPackage.Registry.INSTANCE.getEPackage(Sparse_layersPackage.eNS_URI);
		Sparse_layersPackageImpl theSparse_layersPackage = (Sparse_layersPackageImpl)(registeredPackage instanceof Sparse_layersPackageImpl ? registeredPackage : Sparse_layersPackage.eINSTANCE);
		registeredPackage = EPackage.Registry.INSTANCE.getEPackage(Distance_functionsPackage.eNS_URI);
		Distance_functionsPackageImpl theDistance_functionsPackage = (Distance_functionsPackageImpl)(registeredPackage instanceof Distance_functionsPackageImpl ? registeredPackage : Distance_functionsPackage.eINSTANCE);
		registeredPackage = EPackage.Registry.INSTANCE.getEPackage(Loss_functionsPackage.eNS_URI);
		Loss_functionsPackageImpl theLoss_functionsPackage = (Loss_functionsPackageImpl)(registeredPackage instanceof Loss_functionsPackageImpl ? registeredPackage : Loss_functionsPackage.eINSTANCE);
		registeredPackage = EPackage.Registry.INSTANCE.getEPackage(DataParallel_layersPackage.eNS_URI);
		DataParallel_layersPackageImpl theDataParallel_layersPackage = (DataParallel_layersPackageImpl)(registeredPackage instanceof DataParallel_layersPackageImpl ? registeredPackage : DataParallel_layersPackage.eINSTANCE);
		registeredPackage = EPackage.Registry.INSTANCE.getEPackage(Layer_weight_regularizersPackage.eNS_URI);
		Layer_weight_regularizersPackageImpl theLayer_weight_regularizersPackage = (Layer_weight_regularizersPackageImpl)(registeredPackage instanceof Layer_weight_regularizersPackageImpl ? registeredPackage : Layer_weight_regularizersPackage.eINSTANCE);
		registeredPackage = EPackage.Registry.INSTANCE.getEPackage(Layer_weight_initializersPackage.eNS_URI);
		Layer_weight_initializersPackageImpl theLayer_weight_initializersPackage = (Layer_weight_initializersPackageImpl)(registeredPackage instanceof Layer_weight_initializersPackageImpl ? registeredPackage : Layer_weight_initializersPackage.eINSTANCE);

		// Create package meta-data objects
		theVision_layersPackage.createPackageContents();
		theAIMLPackage.createPackageContents();
		theModulePackage.createPackageContents();
		theTensorPackage.createPackageContents();
		theDatatypesPackage.createPackageContents();
		thePooling_layersPackage.createPackageContents();
		theConvolution_layersPackage.createPackageContents();
		theLayer_weight_constraintsPackage.createPackageContents();
		thePadding_layersPackage.createPackageContents();
		theNonLinearActivationsPackage.createPackageContents();
		theSoftMinMaxActivationsPackage.createPackageContents();
		theNormalization_layersPackage.createPackageContents();
		theRecurrent_layersPackage.createPackageContents();
		theTransformer_layersPackage.createPackageContents();
		theLinear_layersPackage.createPackageContents();
		theDropout_layersPackage.createPackageContents();
		theSparse_layersPackage.createPackageContents();
		theDistance_functionsPackage.createPackageContents();
		theLoss_functionsPackage.createPackageContents();
		theDataParallel_layersPackage.createPackageContents();
		theLayer_weight_regularizersPackage.createPackageContents();
		theLayer_weight_initializersPackage.createPackageContents();

		// Initialize created meta-data
		theVision_layersPackage.initializePackageContents();
		theAIMLPackage.initializePackageContents();
		theModulePackage.initializePackageContents();
		theTensorPackage.initializePackageContents();
		theDatatypesPackage.initializePackageContents();
		thePooling_layersPackage.initializePackageContents();
		theConvolution_layersPackage.initializePackageContents();
		theLayer_weight_constraintsPackage.initializePackageContents();
		thePadding_layersPackage.initializePackageContents();
		theNonLinearActivationsPackage.initializePackageContents();
		theSoftMinMaxActivationsPackage.initializePackageContents();
		theNormalization_layersPackage.initializePackageContents();
		theRecurrent_layersPackage.initializePackageContents();
		theTransformer_layersPackage.initializePackageContents();
		theLinear_layersPackage.initializePackageContents();
		theDropout_layersPackage.initializePackageContents();
		theSparse_layersPackage.initializePackageContents();
		theDistance_functionsPackage.initializePackageContents();
		theLoss_functionsPackage.initializePackageContents();
		theDataParallel_layersPackage.initializePackageContents();
		theLayer_weight_regularizersPackage.initializePackageContents();
		theLayer_weight_initializersPackage.initializePackageContents();

		// Mark meta-data to indicate it can't be changed
		theVision_layersPackage.freeze();

		// Update the registry and return the package
		EPackage.Registry.INSTANCE.put(Vision_layersPackage.eNS_URI, theVision_layersPackage);
		return theVision_layersPackage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public EClass getVision_layers() {
		return vision_layersEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public EClass getVision_layers_1() {
		return vision_layers_1EClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public EAttribute getVision_layers_1_Size() {
		return (EAttribute)vision_layers_1EClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public EAttribute getVision_layers_1_Scale_factor() {
		return (EAttribute)vision_layers_1EClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public EClass getPixelShuffle() {
		return pixelShuffleEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public EAttribute getPixelShuffle_Upscale_factor() {
		return (EAttribute)pixelShuffleEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public EClass getUpsample() {
		return upsampleEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public EAttribute getUpsample_Mode() {
		return (EAttribute)upsampleEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public EAttribute getUpsample_Align_corners() {
		return (EAttribute)upsampleEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public EClass getUpsamplingNearest2d() {
		return upsamplingNearest2dEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public EClass getUpsamplingBilinear2d() {
		return upsamplingBilinear2dEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Vision_layersFactory getVision_layersFactory() {
		return (Vision_layersFactory)getEFactoryInstance();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isCreated = false;

	/**
	 * Creates the meta-model objects for the package.  This method is
	 * guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void createPackageContents() {
		if (isCreated) return;
		isCreated = true;

		// Create classes and their features
		vision_layersEClass = createEClass(VISION_LAYERS);

		vision_layers_1EClass = createEClass(VISION_LAYERS_1);
		createEAttribute(vision_layers_1EClass, VISION_LAYERS_1__SIZE);
		createEAttribute(vision_layers_1EClass, VISION_LAYERS_1__SCALE_FACTOR);

		pixelShuffleEClass = createEClass(PIXEL_SHUFFLE);
		createEAttribute(pixelShuffleEClass, PIXEL_SHUFFLE__UPSCALE_FACTOR);

		upsampleEClass = createEClass(UPSAMPLE);
		createEAttribute(upsampleEClass, UPSAMPLE__MODE);
		createEAttribute(upsampleEClass, UPSAMPLE__ALIGN_CORNERS);

		upsamplingNearest2dEClass = createEClass(UPSAMPLING_NEAREST2D);

		upsamplingBilinear2dEClass = createEClass(UPSAMPLING_BILINEAR2D);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isInitialized = false;

	/**
	 * Complete the initialization of the package and its meta-model.  This
	 * method is guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void initializePackageContents() {
		if (isInitialized) return;
		isInitialized = true;

		// Initialize package
		setName(eNAME);
		setNsPrefix(eNS_PREFIX);
		setNsURI(eNS_URI);

		// Obtain other dependent packages
		ModulePackage theModulePackage = (ModulePackage)EPackage.Registry.INSTANCE.getEPackage(ModulePackage.eNS_URI);
		TypesPackage theTypesPackage = (TypesPackage)EPackage.Registry.INSTANCE.getEPackage(TypesPackage.eNS_URI);

		// Create type parameters

		// Set bounds for type parameters

		// Add supertypes to classes
		vision_layersEClass.getESuperTypes().add(theModulePackage.getModel());
		vision_layers_1EClass.getESuperTypes().add(this.getVision_layers());
		pixelShuffleEClass.getESuperTypes().add(this.getVision_layers());
		upsampleEClass.getESuperTypes().add(this.getVision_layers_1());
		upsamplingNearest2dEClass.getESuperTypes().add(this.getVision_layers_1());
		upsamplingBilinear2dEClass.getESuperTypes().add(this.getVision_layers_1());

		// Initialize classes, features, and operations; add parameters
		initEClass(vision_layersEClass, Vision_layers.class, "Vision_layers", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$

		initEClass(vision_layers_1EClass, Vision_layers_1.class, "Vision_layers_1", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
		initEAttribute(getVision_layers_1_Size(), theTypesPackage.getInteger(), "size", null, 0, -1, Vision_layers_1.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
		initEAttribute(getVision_layers_1_Scale_factor(), theTypesPackage.getReal(), "scale_factor", null, 0, -1, Vision_layers_1.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$

		initEClass(pixelShuffleEClass, PixelShuffle.class, "PixelShuffle", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
		initEAttribute(getPixelShuffle_Upscale_factor(), theTypesPackage.getInteger(), "upscale_factor", null, 1, 1, PixelShuffle.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$

		initEClass(upsampleEClass, Upsample.class, "Upsample", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
		initEAttribute(getUpsample_Mode(), theTypesPackage.getString(), "mode", null, 0, 1, Upsample.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$
		initEAttribute(getUpsample_Align_corners(), theTypesPackage.getBoolean(), "align_corners", null, 0, 1, Upsample.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$

		initEClass(upsamplingNearest2dEClass, UpsamplingNearest2d.class, "UpsamplingNearest2d", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$

		initEClass(upsamplingBilinear2dEClass, UpsamplingBilinear2d.class, "UpsamplingBilinear2d", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
	}

} //Vision_layersPackageImpl
