You are mixing numerical and string expressions. You must make everything a 
string expression.
Example
Ionic = 0
Ionic += 0.5 * (('X'+str(k1)) * (ionic_dic[k1] ** 2))
Should be
Ionic = ""
Ionic += "+0.5 * ((X"+str(k1)+") * ("+str(ionic_dic[k1])+'"** 2))"
On Thursday, September 1, 2022 at 7:11:34 AM UTC-5 z.kari...@gmail.com 
wrote:

> Dear Jhonoton
> If my best choice is the first then I have will have difficulty to pass 
> some stuff in my string, as an example:
>
> cation = {'Na': 1,'Cl':2}
> anion = {'Cl': 1}
>
>
> ionic_dic = dict()
> for d in (cation, anion):
>     ionic_dic.update(d)
> def ionicstr():
>     Ionic = 0
>     sqrt_I = 0
>     for k1 in ionic_dic:
>
>         Ionic += 0.5 * (('X'+str(k1)) * (ionic_dic[k1] ** 2))
>         sqrt_I += (Ionic) ** 0.5
>
>         print(Ionic, sqrt_I)
>     return Ionic, sqrt_I
>
> def term():
>     for i in cation:
>         A ='X' + str(i) + str(ionicstr()[0])
>         print(A)
>     return A
> term()
>
> Is there any way to pass computed ionicstr()[0] to string??
> Zohreh Karimzadeh
> Skype Name 49a52224a8b6b38b
> Twitter Account @zohrehkarimzad1
> +989102116325 <+98%20910%20211%206325>      
>                                                    
> ((((((((((((((((Value Water)))))))))))))))
>
>
> On Thu, Sep 1, 2022 at 12:43 AM gu...@uwosh.edu <gu...@uwosh.edu> wrote:
>
>> Zohreh,
>>
>> I cannot tell you what is your best choice until you tell me what you are 
>> doing after you build the expression. Is it 1 or 2, as I asked before?
>>
>> 1) You ultimately pass a string expression to lmfit or some other fitting 
>> package that is parsed into a numpy expression for fitting or something 
>> similar. 
>>
>> 2)You are making your own model function that returns a number every time 
>> it is called by some other package (fitting?).
>>
>> Please explain exactly how you wish to use the expression you are 
>> developing and, if you are using it with another tool, which one?
>>
>> Regards,
>> Jonathan
>> On Friday, August 26, 2022 at 9:24:32 PM UTC-5 z.kari...@gmail.com wrote:
>>
>>> Dear Jonathan 
>>> Thank you for your reply. 
>>> About using strings instead of sympy good idea, It is necessary to 
>>> know that there are bunch of functions that are inserted in the main 
>>> model as one of them : 
>>>
>>> anion = {'Cl': 1} 
>>> cation = {'Na': 1} 
>>> ionic_dic = dict() 
>>> for d in (cation, anion): 
>>> ionic_dic.update(d) 
>>> def ionicstr(): 
>>> Ionic = 0 
>>> sqrt_I = 0 
>>> for k1 in ionic_dic: 
>>> Ionic += 0.5 * (sp.symbols('X{0}'.format(str(k1))) * 
>>> (ionic_dic[k1] ** 2)) 
>>> sqrt_I += sp.sqrt(Ionic) 
>>> print(Ionic, sqrt_I) 
>>> return Ionic, sqrt_I 
>>> AS can be seen while all of these kinds of functions must be evaluated 
>>> or substituted in the main model. 
>>> Is it still possible to use strings instead of sympy?? 
>>> Regards, 
>>> Zohreh 
>>>
>>> On Fri, Aug 26, 2022 at 6:04 PM gu...@uwosh.edu <gu...@uwosh.edu> 
>>> wrote: 
>>> > 
>>> > Zohreh, 
>>> > 
>>> > It is still unclear what you are actually doing. I can think of two 
>>> possibilities (are either of them correct?): 
>>> > 
>>> > 1) You ultimately pass a string expression to lmfit or some other 
>>> fitting package that is parsed into a numpy expression for fitting or 
>>> something similar. So I am suggesting that you remove the intermediate step 
>>> of creating a sympy expression to make things more efficient. You can 
>>> generate the string expression dynamically in essentially the same way you 
>>> are currently generating the sympy expression, but avoid having the 
>>> intermediate step of using sympy to generate the expression and then using 
>>> it to generate a string expression that is parsed again. 
>>> > 
>>> > 2) Alternatively, you may be making your own model function (I believe 
>>> for lmfit). In that case you need to generate a function that does a 
>>> calculation. I see no reason it has to have human readable names for the 
>>> parameters in the actual calculation. However, you could connect them with 
>>> human readable names through a dictionary or something like that. 
>>> > 
>>> > If you want a string, your code is almost there. As long as the 
>>> elements of cation and anion are strings. Just replace things like 
>>> sp.symbols('X{0}'.format(str(i))) with 'X_'+str(i). But maybe that is not 
>>> what you are doing. 
>>> > 
>>> > Jonathan 
>>> > 
>>> > On Friday, August 26, 2022 at 5:03:00 AM UTC-5 z.kari...@gmail.com 
>>> wrote: 
>>> >> 
>>> >> Jonathan has recommended to use string instead of sympy approche to 
>>> >> derive your model and -parameters. 
>>> >> But I stated that my model is driven dynamically. It means, as an 
>>> >> example for one term in model I have: 
>>> >> 
>>> >> term_unca = 0 
>>> >> for k in anion: 
>>> >> for j in cation: 
>>> >> for i in neutral: 
>>> >> term_unca += term_uncX - 2 * 
>>> >> sp.symbols('X{0}'.format(str(i))) * sp.symbols(f'X{str(j)}') * \ 
>>> >> sp.symbols(f'X{str(k)}') * ((cation[j] + 
>>> >> anion[k]) ** 2 / (cation[j] * anion[k])) \ 
>>> >> * sp.symbols(f'U{str(i)}{str(j)}{str(k)}') 
>>> >> This way all the parameters should be created for each run of 
>>> fitting. 
>>> >> 
>>> >> 
>>> >> Zohreh Karimzadeh 
>>> >> https://www.researchgate.net/profile/Zohreh-Karimzadeh 
>>> >> Skype Name 49a52224a8b6b38b 
>>> >> Twitter Account @zohrehkarimzad1 
>>> >> z.kari...@gmail.com 
>>> >> +989102116325 <+98%20910%20211%206325> 
>>> >> ((((((((((((((((Value Water))))))))))))))) 
>>> >> 
>>> >> Zohreh Karimzadeh 
>>> >> https://www.researchgate.net/profile/Zohreh-Karimzadeh 
>>> >> Skype Name 49a52224a8b6b38b 
>>> >> Twitter Account @zohrehkarimzad1 
>>> >> z.kari...@gmail.com 
>>> >> +989102116325 <+98%20910%20211%206325> 
>>> >> ((((((((((((((((Value Water))))))))))))))) 
>>> >> 
>>> >> 
>>> >> On Fri, Aug 26, 2022 at 7:58 AM Peter Stahlecker 
>>> >> <peter.st...@gmail.com> wrote: 
>>> >> > 
>>> >> > Dear Zohreh, 
>>> >> > 
>>> >> > I think, you should describe precisely what you want, rather than 
>>> referring to previous correspondence. 
>>> >> > Someone out there (likely not me) might have a solution to what you 
>>> need - but cannot be bothered to read through you previous correspondence. 
>>> >> > 
>>> >> > 1. 
>>> >> > Parameter names should be made in a dynamic way. 
>>> >> > what exactly do you mean by this? 
>>> >> > Better give an example of what you would like to do. 
>>> >> > 
>>> >> > 2. 
>>> >> > how using for loop in string can be simultaneously handled. 
>>> >> > I have no idea, what your question is - and I am afraid, not many 
>>> people understand. 
>>> >> > Better give an example of what you want to do. 
>>> >> > 
>>> >> > Peter 
>>> >> > 
>>> >> > On Fri 26. Aug 2022 at 04:42 Zohreh Karimzadeh <z.kari...@gmail.com> 
>>> wrote: 
>>> >> >> 
>>> >> >> As can be seen in the former script, parameter names should be 
>>> made in a dynamic way. 
>>> >> >> I am wondering how using for loop in string can be simultaneously 
>>> handled. 
>>> >> >> Regards, 
>>> >> >> Zohreh Karimzadeh 
>>> >> >> https://www.researchgate.net/profile/Zohreh-Karimzadeh 
>>> >> >> Skype Name 49a52224a8b6b38b 
>>> >> >> Twitter Account @zohrehkarimzad1 
>>> >> >> z.kari...@gmail.com 
>>> >> >> +989102116325 <+98%20910%20211%206325> 
>>> >> >> ((((((((((((((((Value Water))))))))))))))) 
>>> >> >> 
>>> >> >> 
>>> >> >> On Wed, Aug 24, 2022 at 9:32 PM gu...@uwosh.edu <gu...@uwosh.edu> 
>>> wrote: 
>>> >> >>> 
>>> >> >>> Zohreh, 
>>> >> >>> 
>>> >> >>> The code snippets you have provided do not suggest you are doing 
>>> anything that requires sympy. So, I am confused. It looks like you need a 
>>> function that generates a string of the summations in your expression, when 
>>> passed species. I think there is a fixed number of parameters for each 
>>> species. You are probably better off building the string for your 
>>> expressions without involving sympy. I am thinking something like this to 
>>> define part of your fit function: 
>>> >> >>> 
>>> >> >>> 
>>> >> >>> def term(species_name): 
>>> >> >>> 
>>> return(species_name+'_param1*conc_'+species_name+'+'+species_name+'_param2*np.sqrt(conc_'+species_name+')')
>>>  
>>>
>>> >> >>> Then 
>>> >> >>> term('Cl') 
>>> >> >>> returns 
>>> >> >>> 'Cl_param1*conc_Cl+Cl_param2*np.sqrt(conc_Cl)' 
>>> >> >>> 
>>> >> >>> Then build your overall expression from these pieces. Then do a 
>>> fit with initial guesses for all the parameters. 
>>> >> >>> 
>>> >> >>> That's how I would do it unless I am manipulating the expressions 
>>> using sympy first. 
>>> >> >>> 
>>> >> >>> Jonathan 
>>> >> >>> On Wednesday, August 24, 2022 at 11:11:58 AM UTC-5 
>>> z.kari...@gmail.com wrote: 
>>> >> >>>> 
>>> >> >>>> I should extract the required model for each system of chemicals 
>>> and do a least squre for derived model and parameters to find the 
>>> parameters for each chemical systems. 
>>> >> >>>> 
>>> >> >>>> 
>>> >> >>>> Zohreh Karimzadeh 
>>> >> >>>> 
>>> >> >>>> Contact me on 
>>> >> >>>> +989102116325 <+98%20910%20211%206325> 
>>> >> >>>> and at 
>>> >> >>>> z.kari...@gmail.com 
>>> >> >>>> 🌧️🌍🌱 
>>> >> >>>> 
>>> >> >>>> On Wed, 24 Aug 2022, 19:33 gu...@uwosh.edu, <gu...@uwosh.edu> 
>>> wrote: 
>>> >> >>>>> 
>>> >> >>>>> Zohreh, 
>>> >> >>>>> 
>>> >> >>>>> I pulled the paper. I see no reason you need to use SymPy to do 
>>> the numerical fitting. I would approach this by inputting the species in a 
>>> dictionary or list and then use that to call functions that generate the 
>>> computed value for each term/sum. Are you trying to keep track of the 
>>> complete symbolic expression or do a numerical calculation? 
>>> >> >>>>> 
>>> >> >>>>> If you are using chemical symbols or reactions, are you taking 
>>> advantage of ChemPy? 
>>> >> >>>>> 
>>> >> >>>>> Jonathan 
>>> >> >>>>> On Tuesday, August 23, 2022 at 12:01:02 AM UTC-5 
>>> z.kari...@gmail.com wrote: 
>>> >> >>>>>> 
>>> >> >>>>>> As following, I should generate each parameters dynamically 
>>> (for 20-30 terms): 
>>> >> >>>>>> 
>>> >> >>>>>> term_vnca = 0 
>>> >> >>>>>> for k in anion: 
>>> >> >>>>>> for j in cation: 
>>> >> >>>>>> for i in neutral: 
>>> >> >>>>>> term_vnca += term_vncX - 4 * 3 * sp.symbols(f'X{str(k)}') * 
>>> sp.symbols('X{0}'.format(str(i))) \ 
>>> >> >>>>>> ** 2 * sp.symbols(f'V{str(i)}{str(j)}{str(k)}') 
>>> >> >>>>>> lnfXs = term_wnca + term_unca + term_vnca + termx_w_solvent1 + 
>>> termx_w_solvent2 
>>> >> >>>>>> 
>>> >> >>>>>> Zohreh Karimzadeh 
>>> >> >>>>>> https://www.researchgate.net/profile/Zohreh-Karimzadeh 
>>> >> >>>>>> Skype Name 49a52224a8b6b38b 
>>> >> >>>>>> Twitter Account @zohrehkarimzad1 
>>> >> >>>>>> z.kari...@gmail.com 
>>> >> >>>>>> +989102116325 <+98%20910%20211%206325> 
>>> >> >>>>>> ((((((((((((((((Value Water))))))))))))))) 
>>> >> >>>>>> 
>>> >> >>>>>> 
>>> >> >>>>>> On Tue, Aug 23, 2022 at 9:26 AM Zohreh Karimzadeh <
>>> z.kari...@gmail.com> wrote: 
>>> >> >>>>>>> 
>>> >> >>>>>>> Not these model and parameters, My model is very complicated 
>>> wit large number of parameters: 
>>> >> >>>>>>> 
>>> >> >>>>>>> As a very simple example I raise this question. 
>>> >> >>>>>>> Zohreh Karimzadeh 
>>> >> >>>>>>> 
>>> >> >>>>>>> Contact me on 
>>> >> >>>>>>> +989102116325 <+98%20910%20211%206325> 
>>> >> >>>>>>> and at 
>>> >> >>>>>>> z.kari...@gmail.com 
>>> >> >>>>>>> 🌧️🌍🌱 
>>> >> >>>>>>> 
>>> >> >>>>>>> 
>>> >> >>>>>>> On Tue, 23 Aug 2022, 05:16 Peter Stahlecker, <
>>> peter.st...@gmail.com> wrote: 
>>> >> >>>>>>>> 
>>> >> >>>>>>>> Dear Zohreh, 
>>> >> >>>>>>>> 
>>> >> >>>>>>>> Just for my understanding: 
>>> >> >>>>>>>> 1. 
>>> >> >>>>>>>> You params are alpha, betta ,gamma, eta (?) 
>>> >> >>>>>>>> 2. 
>>> >> >>>>>>>> What do you mean by generating them dynamically? 
>>> >> >>>>>>>> 
>>> >> >>>>>>>> Peter 
>>> >> >>>>>>>> 
>>> >> >>>>>>>> On Tue 23. Aug 2022 at 02:44 Zohreh Karimzadeh <
>>> z.kari...@gmail.com> wrote: 
>>> >> >>>>>>>>> 
>>> >> >>>>>>>>> Dear Oscar 
>>> >> >>>>>>>>> BIG help ! 
>>> >> >>>>>>>>> Here I seriously need to use sympy to generate my params 
>>> dynamically. 
>>> >> >>>>>>>>> All Bests 
>>> >> >>>>>>>>> Zohreh Karimzadeh 
>>> >> >>>>>>>>> https://www.researchgate.net/profile/Zohreh-Karimzadeh 
>>> >> >>>>>>>>> Skype Name 49a52224a8b6b38b 
>>> >> >>>>>>>>> Twitter Account @zohrehkarimzad1 
>>> >> >>>>>>>>> z.kari...@gmail.com 
>>> >> >>>>>>>>> +989102116325 <+98%20910%20211%206325> 
>>> >> >>>>>>>>> ((((((((((((((((Value Water))))))))))))))) 
>>> >> >>>>>>>>> 
>>> >> >>>>>>>>> 
>>> >> >>>>>>>>> On Mon, Aug 22, 2022 at 7:42 PM Oscar Benjamin <
>>> oscar.j....@gmail.com> wrote: 
>>> >> >>>>>>>>>> 
>>> >> >>>>>>>>>> On Mon, 22 Aug 2022 at 15:36, Peter Stahlecker 
>>> >> >>>>>>>>>> <peter.st...@gmail.com> wrote: 
>>> >> >>>>>>>>>> > 
>>> >> >>>>>>>>>> > Dear Oscar, 
>>> >> >>>>>>>>>> > 
>>> >> >>>>>>>>>> > Thanks for your hint about these parameters!. 
>>> >> >>>>>>>>>> > Probably dumb question of mine: 
>>> >> >>>>>>>>>> > Could one not define f_Vi_est directly as 
>>> >> >>>>>>>>>> > 
>>> >> >>>>>>>>>> > def_Vi_est(gamma, alfa, beta, eta, L, K, VA): 
>>> >> >>>>>>>>>> > Vi_est = gamma - (1 / eta)….. 
>>> >> >>>>>>>>>> > return np.sum(…..) 
>>> >> >>>>>>>>>> > 
>>> >> >>>>>>>>>> > without any ‚lambdification‘? 
>>> >> >>>>>>>>>> 
>>> >> >>>>>>>>>> Yes. In an earlier post the OP showed that they had 
>>> working code like 
>>> >> >>>>>>>>>> that but wanted to know how to do it using SymPy and 
>>> lambdify. I 
>>> >> >>>>>>>>>> presume there is a reason for wanting to use SymPy there 
>>> (perhaps to 
>>> >> >>>>>>>>>> accomplish something slightly different from the exact 
>>> code shown). 
>>> >> >>>>>>>>>> It's also possible that there isn't any actual reason to 
>>> use SymPy for 
>>> >> >>>>>>>>>> this at all though. 
>>> >> >>>>>>>>>> 
>>> >> >>>>>>>>>> -- 
>>> >> >>>>>>>>>> Oscar 
>>> >> >>>>>>>>>> 
>>> >> >>>>>>>>>> -- 
>>> >> >>>>>>>>>> You received this message because you are subscribed to 
>>> the Google Groups "sympy" group. 
>>> >> >>>>>>>>>> To unsubscribe from this group and stop receiving emails 
>>> from it, send an email to sympy+un...@googlegroups.com. 
>>> >> >>>>>>>>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/sympy/CAHVvXxQJUuZ4tVnECPyWE%3DLd03hhhUB5mqv1bjHcjSNf9WP22Q%40mail.gmail.com.
>>>  
>>>
>>> >> >>>>>>>>> 
>>> >> >>>>>>>>> -- 
>>> >> >>>>>>>>> You received this message because you are subscribed to the 
>>> Google Groups "sympy" group. 
>>> >> >>>>>>>>> To unsubscribe from this group and stop receiving emails 
>>> from it, send an email to sympy+un...@googlegroups.com. 
>>> >> >>>>>>>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/sympy/CA%2B1XYLOMV_i3VJXwwVN7JWnuJ9Wo6ZPhULmC1SOubAfFLt-DBQ%40mail.gmail.com.
>>>  
>>>
>>> >> >>>>>>>> 
>>> >> >>>>>>>> -- 
>>> >> >>>>>>>> Best regards, 
>>> >> >>>>>>>> 
>>> >> >>>>>>>> Peter Stahlecker 
>>> >> >>>>>>>> 
>>> >> >>>>>>>> -- 
>>> >> >>>>>>>> You received this message because you are subscribed to the 
>>> Google Groups "sympy" group. 
>>> >> >>>>>>>> To unsubscribe from this group and stop receiving emails 
>>> from it, send an email to sympy+un...@googlegroups.com. 
>>> >> >>>>>>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/sympy/CABKqA0YTOzyZkjhnQmKQKQh-Mrc_H_TcmD9FrXObaTadkfLpkQ%40mail.gmail.com.
>>>  
>>>
>>> >> >>>>> 
>>> >> >>>>> -- 
>>> >> >>>>> You received this message because you are subscribed to the 
>>> Google Groups "sympy" group. 
>>> >> >>>>> To unsubscribe from this group and stop receiving emails from 
>>> it, send an email to sympy+un...@googlegroups.com. 
>>> >> >>>>> 
>>> >> >>>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/sympy/17d62c5c-11d8-4b1b-9a44-ae67c8021832n%40googlegroups.com.
>>>  
>>>
>>> >> >>>>> 
>>> >> >>>>> 
>>> >> >>> -- 
>>> >> >>> You received this message because you are subscribed to the 
>>> Google Groups "sympy" group. 
>>> >> >>> To unsubscribe from this group and stop receiving emails from it, 
>>> send an email to sympy+un...@googlegroups.com. 
>>> >> >>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/sympy/837a3351-3aa3-4e1e-98d6-b34f3185d5b2n%40googlegroups.com.
>>>  
>>>
>>> >> >> 
>>> >> >> -- 
>>> >> >> You received this message because you are subscribed to the Google 
>>> Groups "sympy" group. 
>>> >> >> To unsubscribe from this group and stop receiving emails from it, 
>>> send an email to sympy+un...@googlegroups.com. 
>>> >> >> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/sympy/CA%2B1XYLMEq2OLN0npw8RHfghS7m6vgewkrpshqw8gBBU%2BfUAnoQ%40mail.gmail.com.
>>>  
>>>
>>> >> > 
>>> >> > -- 
>>> >> > Best regards, 
>>> >> > 
>>> >> > Peter Stahlecker 
>>> >> > 
>>> >> > -- 
>>> >> > You received this message because you are subscribed to the Google 
>>> Groups "sympy" group. 
>>> >> > To unsubscribe from this group and stop receiving emails from it, 
>>> send an email to sympy+un...@googlegroups.com. 
>>> >> > To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/sympy/CABKqA0b261cO3ixRjsp_YPU0Yk1ahRVgnEytcOkLrQUW-eHdwQ%40mail.gmail.com.
>>>  
>>>
>>> > 
>>> > -- 
>>> > You received this message because you are subscribed to the Google 
>>> Groups "sympy" group. 
>>> > To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to sympy+un...@googlegroups.com. 
>>> > To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/sympy/ec94798a-fcdc-4df8-b80e-2642f5a60ec5n%40googlegroups.com.
>>>  
>>>
>>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "sympy" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to sympy+un...@googlegroups.com.
>>
> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/sympy/54b70a36-3ee5-4d14-b30a-813b8fbf31fcn%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/sympy/54b70a36-3ee5-4d14-b30a-813b8fbf31fcn%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sympy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/8cb04d7b-9995-4806-9d13-397ab6d8ac67n%40googlegroups.com.

Reply via email to