





"""simple docstring"""


from __future__ import annotations




def 					lowercase__    (					lowercase_			)					->		list[int]:




      """simple docstring"""

      _UpperCamelCase      :	Union[str, Any]						=       2
      _UpperCamelCase      :	List[str]						=       []
      while i * i <= n:
            if n % i:
                  i += 1
            else:
                  n //= i
                  factors.append(lowercase_			)
      if n > 1:
            factors.append(lowercase_			)
      return factors


if __name__ == "__main__":
  import doctest

  doctest.testmod()







"""simple docstring"""


import math



class      __SCREAMING_SNAKE_CASE    :







  '''simple docstring'''


  def    __SCREAMING_SNAKE_CASE				(		self   :       Any					,   __a   :       list[list[float]]					,   __a   :       list[int]	)		->				int:
        _UpperCamelCase      :	List[Any]						=       0.0
        _UpperCamelCase      :	Union[str, Any]						=       0.0
        for i in range(len(__a	)	):
              da += math.pow((sample[i] - weights[0][i])					,   2	)
              da += math.pow((sample[i] - weights[1][i])					,   2	)
              return 0 if da > da else 1
        return 0


  def    __SCREAMING_SNAKE_CASE				(		self   :       Optional[Any]					,   __a   :       list[list[int | float]]					,   __a   :       list[int]					,   __a   :       int					,   __a   :       float	)		->				list[list[int | float]]:
        for i in range(len(__a	)	):
              weights[j][i] += alpha * (sample[i] - weights[j][i])
        return weights





def 					lowercase__    (					)					->		None:




      """simple docstring"""

      _UpperCamelCase      :	Optional[int]						=       [[1, 1, 0, 0], [0, 0, 0, 1], [1, 0, 0, 0], [0, 0, 1, 1]]

      # weight initialization ( n, C )
      _UpperCamelCase      :	List[str]						=       [[0.2, 0.6, 0.5, 0.9], [0.8, 0.4, 0.7, 0.3]]

      # training
      _UpperCamelCase      :	List[Any]						=       SelfOrganizingMap()
      _UpperCamelCase      :	int						=       3
      _UpperCamelCase      :	List[Any]						=       0.5

      for _ in range(lowercase_			):
            for j in range(len(lowercase_			)			):
                  # training sample
                  _UpperCamelCase      :	int						=       training_samples[j]

                  # Compute the winning vector
                  _UpperCamelCase      :	Tuple						=       self_organizing_map.get_winner(lowercase_		,lowercase_			)

                  # Update the winning vector
                  _UpperCamelCase      :	int						=       self_organizing_map.update(lowercase_		,lowercase_		,lowercase_		,lowercase_			)

    # classify test sample
      _UpperCamelCase      :	Optional[int]						=       [0, 0, 0, 1]
      _UpperCamelCase      :	Dict						=       self_organizing_map.get_winner(lowercase_		,lowercase_			)

      # results
      print(F'''Clusters that the test sample belongs to : {winner}'''			)
      print(F'''Weights that have been trained : {weights}'''			)


# running the main() function
if __name__ == "__main__":
  main()
