
from __future__ import annotations

import matplotlib.pyplot as plt  # type: ignore
import numpy

# initial triangle of Koch snowflake
_snake_case      = numpy.array([0, 0])
_snake_case      = numpy.array([0.5, 0.8_66_02_54])
_snake_case      = numpy.array([1, 0])
_snake_case      = [VECTOR_1, VECTOR_2, VECTOR_3, VECTOR_1]

def  __lowerCamelCase					( _lowercase						,     _lowercase			)       ->      list[numpy.ndarray]:
     UpperCamelCase						    =					initial_vectors
     for _ in range(_lowercase			):
          UpperCamelCase						    =					iteration_step(_lowercase			)
     return vectors

def  __lowerCamelCase					( _lowercase			)       ->      list[numpy.ndarray]:
     UpperCamelCase						    =					[]
     for i, start_vector in enumerate(vectors[:-1]			):
          UpperCamelCase						    =					vectors[i + 1]
          new_vectors.append(_lowercase			)
          UpperCamelCase						    =					end_vector - start_vector
          new_vectors.append(start_vector + difference_vector / 3			)
          new_vectors.append(
              start_vector + difference_vector / 3 + rotate(difference_vector / 3						,     60			)			)
          new_vectors.append(start_vector + difference_vector * 2 / 3			)
     new_vectors.append(vectors[-1]			)
     return new_vectors

def  __lowerCamelCase					( _lowercase						,     _lowercase			)       ->      numpy.ndarray:
     UpperCamelCase						    =					numpy.radians(_lowercase			)
     UpperCamelCase    ,		UpperCamelCase						    =					numpy.cos(_lowercase			), numpy.sin(_lowercase			)
     UpperCamelCase						    =					numpy.array(((c, -s), (s, c))			)
     return numpy.dot(_lowercase						,     _lowercase			)

def  __lowerCamelCase					( _lowercase			)       ->      None:
     UpperCamelCase						    =					plt.gca()
     axes.set_aspect('equal'			)

     # matplotlib.pyplot.plot takes a list of all x-coordinates and a list of all
     # y-coordinates as inputs, which are constructed from the vector-list using
     # zip()
     UpperCamelCase    ,		UpperCamelCase						    =					zip(*_lowercase			)
     plt.plot(_lowercase						,     _lowercase			)
     plt.show()


if __name__ == "__main__":
 import doctest

 doctest.testmod()

 _snake_case      = iterate(INITIAL_VECTORS, 5)
 plot(processed_vectors)




# Copyright 2023 The HuggingFace Team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from typing import TYPE_CHECKING

# rely on isort to merge the imports
from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available, is_vision_available


_snake_case      = {
    '''configuration_efficientnet''': [
        '''EFFICIENTNET_PRETRAINED_CONFIG_ARCHIVE_MAP''',
        '''EfficientNetConfig''',
        '''EfficientNetOnnxConfig''',
    ]
}

try:
 if not is_vision_available():
  raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
 pass
else:
 _snake_case      = ['''EfficientNetImageProcessor''']

try:
 if not is_torch_available():
  raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
 pass
else:
 _snake_case      = [
     '''EFFICIENTNET_PRETRAINED_MODEL_ARCHIVE_LIST''',
     '''EfficientNetForImageClassification''',
     '''EfficientNetModel''',
     '''EfficientNetPreTrainedModel''',
 ]

if TYPE_CHECKING:
 from .configuration_efficientnet import (
     EFFICIENTNET_PRETRAINED_CONFIG_ARCHIVE_MAP,
     EfficientNetConfig,
     EfficientNetOnnxConfig,
 )

 try:
  if not is_vision_available():
   raise OptionalDependencyNotAvailable()
 except OptionalDependencyNotAvailable:
  pass
 else:
  from .image_processing_efficientnet import EfficientNetImageProcessor

 try:
  if not is_torch_available():
   raise OptionalDependencyNotAvailable()
 except OptionalDependencyNotAvailable:
  pass
 else:
  from .modeling_efficientnet import (
      EFFICIENTNET_PRETRAINED_MODEL_ARCHIVE_LIST,
      EfficientNetForImageClassification,
      EfficientNetModel,
      EfficientNetPreTrainedModel,
  )

else:
 import sys

 _snake_case      = _LazyModule(__name__, globals()['''__file__'''], _import_structure)


