#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 17 19:11:52 2022
@author: jlebovits
"""
from __future__ import division
import sys
import random
from copy import deepcopy
import src.scripts.Mes_fctions.Mes_fctions_deterministes
from src.scripts.Mes_fctions.Mes_fctions_deterministes import *
import src.scripts.Mes_fctions.Mes_fctions_generalistes
from src.scripts.Mes_fctions.Mes_fctions_generalistes import *
import src.scripts.Mes_fctions.Mes_fctions_probabilistes
from src.scripts.Mes_fctions.Mes_fctions_probabilistes import *
import src.scripts.Mes_fctions.Mes_fctions_d_ecriture_Latex
from src.scripts.Mes_fctions.Mes_fctions_d_ecriture_Latex import *
# import src.scripts.Mes_fctions.Mes_fctions_d_alg_generale
# from src.scripts.Mes_fctions.Mes_fctions_d_alg_generale import *
import sympy
from random import uniform, Random, randrange, randint
from random import *
from functools import reduce
import numpy.random as npr
import numpy.linalg as alg
import numpy as np
from sympy import *
from sympy.stats import *
from random import uniform, Random, randrange, randint
from sympy.stats import P, E, variance, Die, Normal
from sympy import Eq, simplify
import random
import sympy
from sympy import *
from sympy.stats import *
from random import uniform, Random, randrange, randint
from sympy.stats import P, E, variance, Die, Normal
from sympy import Eq, simplify
from random import uniform, Random, randrange, randint
from random import *
from functools import reduce
import numpy.random as npr
import numpy.linalg as alg
import numpy as np
import math
from random import uniform, Random, randrange, randint
#import numpy as np
#import numpy.random as npr
from sympy import *
from random import *
from sympy.stats import *
# from sympy import Eq, simplify, S, Symbol, Rational, binomial, expand_func
from sympy.stats import P, E, variance, Die, Normal, DiscreteUniform, Bernoulli, sample, Binomial, density, Normal, sample_iter, given
from sympy import Piecewise, log, piecewise_fold
from sympy import S, Symbol
from random import uniform, Random, randrange, randint
from sympy import Eq, simplify, S, Symbol
from sympy import MatrixSymbol, Transpose, transpose
from sympy.abc import x, y
import numpy as np
import numpy.random as npr
inf=float("inf")
import random
#print('toto')
[docs]
def alg_generale() :
chaine = "alg generale Ok"
return chaine
##===========================================================================================
##===========================================================================================
#
#
# New fction
#
##===========================================================================================
##=========================================================================================
from sympy import Symbol, Poly
import random
[docs]
def Poly_with_random_coef(symbol, deg, constant_coef):
"""
Returns a list containing:
- A polynomial of degree deg in the indeterminate symbol, whose coefficients are randomly and uniformly drawn from the interval [-9, 9].
The constant coefficient is zero if constant_coef equals 0, non-zero if constant_coef equals 1, and randomly drawn from [-9, 9] if constant_coef is neither 0 nor 1.
Additionally, the coefficient of the term X^deg is non-zero to ensure that the polynomial is indeed of degree deg.
- This polynomial written in TeX with the monomials given in ascending order.
- This polynomial written in TeX with the monomials given in descending order.
"""
# Générer tous les coefficients aléatoirement
L = [random.randint(-9, 9) for _ in range(deg + 1)]
# Traitement spécial pour le coefficient constant
if constant_coef == 0:
L[0] = 0
elif constant_coef == 1:
# Assurer un coefficient constant non nul
while L[0] == 0:
L[0] = random.randint(-9, 9)
# Assurer que le coefficient de degré le plus élevé soit non nul
while L[deg] == 0:
L[deg] = random.randint(-9, 9)
# Créer le symbole pour la variable
X = Symbol(symbol)
# Construire l'expression symbolique
U = L[0] * X**0
# Générer la représentation LaTeX en ordre croissant
U_latex = str(L[0]) if L[0] != 0 else ''
# Ajouter les termes de degré supérieur
for i in range(1, deg + 1):
if L[i] == 0:
continue
# Ajouter le terme à l'expression symbolique
U += L[i] * X**i
# Ajouter le terme à la chaîne LaTeX
sign = '+' if L[i] > 0 and U_latex != '' else ''
if i == 1:
term = f"{symbol}" if L[i] == 1 else (f"-{symbol}" if L[i] == -1 else f"{L[i]}{symbol}")
else:
term = f"{symbol}^{{{i}}}" if L[i] == 1 else (f"-{symbol}^{{{i}}}" if L[i] == -1 else f"{L[i]}{symbol}^{{{i}}}")
U_latex += f"{sign}{term}"
# Cas polynôme nul
if U_latex == "":
U_latex = "0"
# Générer la représentation LaTeX en ordre décroissant
V_latex = ""
for i in range(deg, -1, -1):
if L[i] == 0:
continue
sign = '' if V_latex == '' else ('+' if L[i] > 0 else '')
if i == 0:
term = f"{L[i]}"
elif i == 1:
term = f"{symbol}" if L[i] == 1 else (f"-{symbol}" if L[i] == -1 else f"{L[i]}{symbol}")
else:
term = f"{symbol}^{{{i}}}" if L[i] == 1 else (f"-{symbol}^{{{i}}}" if L[i] == -1 else f"{L[i]}{symbol}^{{{i}}}")
V_latex += f"{sign}{term}"
# Cas polynôme nul
if V_latex == "":
V_latex = "0"
# Créer l'objet Poly
Polynomial = Poly(U, X)
Result = [Polynomial, U_latex, V_latex]
return Result
##===========================================================================================
##===========================================================================================
# Début des essais
##===========================================================================================
##===========================================================================================
# X = Symbol('X')
# ###Le coef constant n'est pas nul et l'ordre des monomes est croissant
# D = Poly_with_random_coef_v2('X',3,2)
# D_0 = D[0]
# D_1 = D[1]
# D_2 = D[2]
# print('D_0 =' , D_0,'\n')
# print('D_1 =' , D_1,'\n')
# print('D_2 =' , D_2,'\n')
#print('type(D_0) =' , type(D_0),'\n')
# Le coef constant n'est pas nul mais l'ordre des monomes est décroissant
# D = Poly_with_random_coef_v2('X',3,0)
# D_1 = D[0]
# D_2 = D[1]
# D_3 = D[2]
# print('D_1 =' , D_1,'\n')
# print('D_2 =' , D_2,'\n')
# print('D_3 =' , D_3,'\n')
##===========================================================================================
##===========================================================================================
# Fin des essais
##===========================================================================================
##===========================================================================================
# def Poly_with_given_list_of_coef(symbol, Lcoef):
# """
# Returns a list containing:
# - A polynomial of degree deg in the indeterminate symbol, whose coefficients are the one given in the list L.
# Additionally, the coefficient of the term X^deg is non-zero to ensure that the polynomial is indeed of degree deg.
# - This polynomial written in TeX with the monomials given in ascending order.
# - This polynomial written in TeX with the monomials given in descending order.
# FR : renvoie une liste contenant
# - un polynôme de degré deg en l'indéterminée symbol, dont les coefficients sont donnés par la liste L
# De plus, le coefficient devant le terme X^deg est non nul de façon à ce que le polynôme soit bien de degré deg.
# - Ce polynôme écrit en TeX (avec les monômes donnés par ordre croissant).
# - Ce polynôme écrit en TeX (avec les monômes donnés par ordre décroissant).
# """
# L = []
# for i in range(len(Lcoef)):
# r = Lcoef[i]
# L.append(r)
# X = Symbol(symbol)
# deg = len(Lcoef) - 1
# # Construct the polynomial
# U = L[0] * X**0
# q_L_0 = L[0]
# if q_L_0.is_integerl:
# t =
# elif q_L_0.is_Rational:
# q_L_0_numerator = q_L_0.p
# q_L_0_denominator = q_L_0.q
# t = "\\"'frac{q_L_0_numerator}{q_L_0_denominator}'
# U_latex = t if L[0] != 0 else ''
# for i in range(1, deg + 1):
# if L[i] == 0:
# continue
# U += L[i] * X**i
# sign = '+' if L[i] > 0 and U_latex != '' else ''
# if i == 1:
# term = f"{symbol}" if L[i] == 1 else (f"-{symbol}" if L[i] == -1 else f"{L[i]}{symbol}")
# else:
# term = f"{symbol}^{{{i}}}" if L[i] == 1 else (f"-{symbol}^{{{i}}}" if L[i] == -1 else f"{L[i]}{symbol}^{{{i}}}")
# U_latex += f"{sign}{term}"
# # Construct the polynomial in descending order
# V_latex = ""
# for i in range(deg, -1, -1):
# if L[i] == 0:
# continue
# sign = '' if V_latex == '' else ('+' if L[i] > 0 else '')
# if i == 0:
# term = f"{L[i]}"
# elif i == 1:
# term = f"{symbol}" if L[i] == 1 else (f"-{symbol}" if L[i] == -1 else f"{L[i]}{symbol}")
# else:
# term = f"{symbol}^{{{i}}}" if L[i] == 1 else (f"-{symbol}^{{{i}}}" if L[i] == -1 else f"{L[i]}{symbol}^{{{i}}}")
# V_latex += f"{sign}{term}"
# Polynomial = Poly(U, X)
# Result = [Polynomial, U_latex, V_latex]
# return Result
# ##===========================================================================================
# ##===========================================================================================
# # Début des essais
# ##===========================================================================================
# ##===========================================================================================
# X = Symbol('X')
# L = [1, Rational(2 , 3), 6, 4, 5]
# print('L =' , L,'\n')
# L_inv = L[::-1]
# print('L_inv =' , L_inv,'\n')
# ###Le coef constant n'est pas nul et l'ordre des monomes est croissant
# D = Poly_with_given_list_of_coef('X',L)
# D_0 = D[0]
# D_1 = D[1]
# D_2 = D[2]
# print('D_0 =' , D_0,'\n')
# print('D_1 =' , D_1,'\n')
# print('D_2 =' , D_2,'\n')
# #print('type(D_0) =' , type(D_0),'\n')
# r = Rational(3, 4)
# # Get the numerator
# numerator = r.p
# denominator = r.q
# print(numerator)
# # Get the denominator
# print(denominator)
# f = Rational(2, 3)
# if f.is_Rational:
# f_numerator = f.p
# f_denominator = f.q
# t = "\\"'frac{f_numerator}{f_denominator}'
# print('t =' , t,'\n')
#"\\"'begin{align*}\n'
# Le coef constant n'est pas nul mais l'ordre des monomes est décroissant
# D = Poly_with_random_coef_v2('X',3,0)
# D_1 = D[0]
# D_2 = D[1]
# D_3 = D[2]
# print('D_1 =' , D_1,'\n')
# print('D_2 =' , D_2,'\n')
# print('D_3 =' , D_3,'\n')
##===========================================================================================
##===========================================================================================
# Fin des essais
##===========================================================================================
##===========================================================================================
##===========================================================================================
##===========================================================================================
# Début des essais
##===========================================================================================
##===========================================================================================
##===========================================================================================
##===========================================================================================
#
#
# New fction
#
##===========================================================================================
##===========================================================================================
##===========================================================================================
##===========================================================================================
# Fin des essais
##===========================================================================================
##===========================================================================================
##===========================================================================================
##===========================================================================================
# Début des essais
##===========================================================================================
##===========================================================================================