2727from .operation import Op
2828
2929if typing .TYPE_CHECKING :
30- from .activation import Activation # noqa: F401
31- from .defuzzifier import Defuzzifier # noqa: F401
30+ from .activation import Activation
31+ from .defuzzifier import Defuzzifier
3232 from .engine import Engine
33- from .norm import Norm # noqa: F401
33+ from .norm import Norm
3434 from .rule import Rule , RuleBlock
3535 from .term import Term
3636 from .variable import InputVariable , OutputVariable , Variable
@@ -47,7 +47,7 @@ def to_string(self, instance: object) -> str:
4747 def to_file (self , path : Union [str , Path ], instance : object ) -> None :
4848 if isinstance (path , str ):
4949 path = Path (path )
50- with path .open (mode = "w" ) as fll :
50+ with path .open (mode = "w" , encoding = "UTF8" ) as fll :
5151 fll .write (self .to_string (instance ))
5252
5353
@@ -76,7 +76,7 @@ def to_string(self, instance: object) -> str:
7676 if isinstance (instance , Term ):
7777 return self .term (instance )
7878
79- from .defuzzifier import Defuzzifier # noqa: F811
79+ from .defuzzifier import Defuzzifier
8080
8181 if isinstance (instance , Defuzzifier ):
8282 return self .defuzzifier (instance )
@@ -88,12 +88,12 @@ def to_string(self, instance: object) -> str:
8888 if isinstance (instance , Rule ):
8989 return self .rule (instance )
9090
91- from .norm import Norm # noqa: F811
91+ from .norm import Norm
9292
9393 if isinstance (instance , Norm ):
9494 return self .norm (instance )
9595
96- from .activation import Activation # noqa: F811
96+ from .activation import Activation
9797
9898 if isinstance (instance , Activation ):
9999 return self .activation (instance )
@@ -207,31 +207,33 @@ def __init__(self, indent: str = " ") -> None:
207207 self .indent = indent
208208
209209 def engine (self , engine : "Engine" , level : int = 0 ) -> str :
210- result = [f"""{ level * self .indent } import fuzzylite as fl""" , "" ]
210+ result = [f"""{ level * self .indent } import fuzzylite as fl""" , "" ]
211211 result += [
212- f"{ level * self .indent } engine = fl.Engine(" ,
213- f"{ (level + 1 ) * self .indent } name={ self .format (engine .name )} ," ,
214- f"{ (level + 1 ) * self .indent } description={ self .format (engine .description )} " ,
212+ f"{ level * self .indent } engine = fl.Engine(" ,
213+ f"{ (level + 1 ) * self .indent } name={ self .format (engine .name )} ," ,
214+ f"{ (level + 1 ) * self .indent } description={ self .format (engine .description )} " ,
215215 ")" ,
216216 ]
217217
218218 input_variables : List [str ] = []
219219 for iv in engine .input_variables :
220220 input_variables += [
221- f"{ (level + 1 ) * self .indent } { self .input_variable (iv , level + 2 )} "
221+ f"{ (level + 1 ) * self .indent } { self .input_variable (iv , level + 2 )} "
222222 ]
223223 result += [self .key_values ("engine.input_variables" , input_variables )]
224224
225225 output_variables : List [str ] = []
226226 for ov in engine .output_variables :
227227 output_variables += [
228- f"{ (level + 1 ) * self .indent } { self .output_variable (ov , level + 2 )} "
228+ f"{ (level + 1 ) * self .indent } { self .output_variable (ov , level + 2 )} "
229229 ]
230230 result += [self .key_values ("engine.output_variables" , output_variables )]
231231
232232 rule_blocks : List [str ] = []
233233 for rb in engine .rule_blocks :
234- rule_blocks += [f"{ (level + 1 )* self .indent } { self .rule_block (rb , level + 2 )} " ]
234+ rule_blocks += [
235+ f"{ (level + 1 ) * self .indent } { self .rule_block (rb , level + 2 )} "
236+ ]
235237 result += [self .key_values ("engine.rule_blocks" , rule_blocks )]
236238 result += ["" ]
237239 return "\n " .join (result )
@@ -254,7 +256,7 @@ def to_string(self, instance: object) -> str:
254256 if isinstance (instance , Term ):
255257 return self .term (instance )
256258
257- from .defuzzifier import Defuzzifier # noqa: F811
259+ from .defuzzifier import Defuzzifier
258260
259261 if isinstance (instance , Defuzzifier ):
260262 return self .defuzzifier (instance )
@@ -266,12 +268,12 @@ def to_string(self, instance: object) -> str:
266268 if isinstance (instance , Rule ):
267269 return self .rule (instance )
268270
269- from .norm import Norm # noqa: F811
271+ from .norm import Norm
270272
271273 if isinstance (instance , Norm ):
272274 return self .norm (instance )
273275
274- from .activation import Activation # noqa: F811
276+ from .activation import Activation
275277
276278 if isinstance (instance , Activation ):
277279 return self .activation (instance )
@@ -292,115 +294,116 @@ def format(self, x: Any) -> str:
292294 return str (x )
293295
294296 def key_values (self , name : str , values : List [Any ], level : int = 0 ) -> str :
295- result = [f"{ level * self .indent } { name } = " ]
297+ result = [f"{ level * self .indent } { name } = " ]
296298 if not values :
297299 result [0 ] += "[]"
298300 else :
299301 result [0 ] += "["
300- result += [",\n " .join (values ), f"{ level * self .indent } ]" ]
302+ result += [",\n " .join (values ), f"{ level * self .indent } ]" ]
301303 return "\n " .join (result )
302304
303305 def input_variable (self , iv : "InputVariable" , level : int = 1 ) -> str :
304306 result = [
305- f"{ level * self .indent } name={ self .format (iv .name )} " ,
306- f"{ level * self .indent } description={ self .format (iv .description )} " ,
307- f"{ level * self .indent } enabled={ self .format (iv .enabled )} " ,
308- f"{ level * self .indent } minimum={ self .format (iv .minimum )} " ,
309- f"{ level * self .indent } maximum={ self .format (iv .maximum )} " ,
310- f"{ level * self .indent } lock_range={ self .format (iv .lock_range )} " ,
307+ f"{ level * self .indent } name={ self .format (iv .name )} " ,
308+ f"{ level * self .indent } description={ self .format (iv .description )} " ,
309+ f"{ level * self .indent } enabled={ self .format (iv .enabled )} " ,
310+ f"{ level * self .indent } minimum={ self .format (iv .minimum )} " ,
311+ f"{ level * self .indent } maximum={ self .format (iv .maximum )} " ,
312+ f"{ level * self .indent } lock_range={ self .format (iv .lock_range )} " ,
311313 ]
312314 if iv .terms :
313315 if len (iv .terms ) == 1 :
314- terms = f"{ level * self .indent } terms=[{ self .term (iv .terms [0 ])} ]"
316+ terms = f"{ level * self .indent } terms=[{ self .term (iv .terms [0 ])} ]"
315317 else :
316318 terms = (
317- f"{ level * self .indent } terms=[\n "
319+ f"{ level * self .indent } terms=[\n "
318320 + ",\n " .join (
319- f"{ (level + 1 )* self .indent } { self .term (term )} " for term in iv .terms
321+ f"{ (level + 1 ) * self .indent } { self .term (term )} "
322+ for term in iv .terms
320323 )
321- + f"\n { level * self .indent } ]"
324+ + f"\n { level * self .indent } ]"
322325 )
323326 result += [terms ]
324327
325328 input_variable = ["fl.InputVariable(" ]
326329 input_variable += [",\n " .join (result )]
327- input_variable += [f"{ max (0 , level - 1 ) * self .indent } )" ]
330+ input_variable += [f"{ max (0 , level - 1 ) * self .indent } )" ]
328331
329332 return "\n " .join (input_variable )
330333
331334 def output_variable (self , ov : "OutputVariable" , level : int = 1 ) -> str :
332335 result = [
333- f"{ level * self .indent } name={ self .format (ov .name )} " ,
334- f"{ level * self .indent } description={ self .format (ov .description )} " ,
335- f"{ level * self .indent } enabled={ self .format (ov .enabled )} " ,
336- f"{ level * self .indent } minimum={ self .format (ov .minimum )} " ,
337- f"{ level * self .indent } maximum={ self .format (ov .maximum )} " ,
338- f"{ level * self .indent } lock_range={ self .format (ov .lock_range )} " ,
339- f"{ level * self .indent } aggregation={ self .norm (ov .aggregation )} " ,
340- f"{ level * self .indent } defuzzifier={ self .defuzzifier (ov .defuzzifier )} " ,
341- f"{ level * self .indent } lock_previous={ self .format (ov .lock_previous )} " ,
336+ f"{ level * self .indent } name={ self .format (ov .name )} " ,
337+ f"{ level * self .indent } description={ self .format (ov .description )} " ,
338+ f"{ level * self .indent } enabled={ self .format (ov .enabled )} " ,
339+ f"{ level * self .indent } minimum={ self .format (ov .minimum )} " ,
340+ f"{ level * self .indent } maximum={ self .format (ov .maximum )} " ,
341+ f"{ level * self .indent } lock_range={ self .format (ov .lock_range )} " ,
342+ f"{ level * self .indent } aggregation={ self .norm (ov .aggregation )} " ,
343+ f"{ level * self .indent } defuzzifier={ self .defuzzifier (ov .defuzzifier )} " ,
344+ f"{ level * self .indent } lock_previous={ self .format (ov .lock_previous )} " ,
342345 ]
343346 if ov .terms :
344347 if len (ov .terms ) == 1 :
345- terms = f"{ level * self .indent } terms=[{ self .term (ov .terms [0 ])} ]"
348+ terms = f"{ level * self .indent } terms=[{ self .term (ov .terms [0 ])} ]"
346349 else :
347350 terms = (
348- f"{ level * self .indent } terms=[\n "
351+ f"{ level * self .indent } terms=[\n "
349352 + ",\n " .join (
350- f"{ (level + 1 )* self .indent } { self .term (term )} " for term in ov .terms
353+ f"{ (level + 1 ) * self .indent } { self .term (term )} "
354+ for term in ov .terms
351355 )
352- + f"\n { level * self .indent } ]"
356+ + f"\n { level * self .indent } ]"
353357 )
354358 result += [terms ]
355359
356360 output_variable = ["fl.OutputVariable(" ]
357361 output_variable += [",\n " .join (result )]
358- output_variable += [f"{ max (0 , level - 1 ) * self .indent } )" ]
362+ output_variable += [f"{ max (0 , level - 1 ) * self .indent } )" ]
359363
360364 return "\n " .join (output_variable )
361365
362366 def rule_block (self , rb : "RuleBlock" , level : int = 1 ) -> str :
363367 result = [
364- f"{ level * self .indent } name={ self .format (rb .name )} " ,
365- f"{ level * self .indent } description={ self .format (rb .description )} " ,
366- f"{ level * self .indent } enabled={ self .format (rb .enabled )} " ,
367- f"{ level * self .indent } conjunction={ self .norm (rb .conjunction )} " ,
368- f"{ level * self .indent } disjunction={ self .norm (rb .disjunction )} " ,
369- f"{ level * self .indent } implication={ self .norm (rb .implication )} " ,
370- f"{ level * self .indent } activation={ self .activation (rb .activation )} " ,
368+ f"{ level * self .indent } name={ self .format (rb .name )} " ,
369+ f"{ level * self .indent } description={ self .format (rb .description )} " ,
370+ f"{ level * self .indent } enabled={ self .format (rb .enabled )} " ,
371+ f"{ level * self .indent } conjunction={ self .norm (rb .conjunction )} " ,
372+ f"{ level * self .indent } disjunction={ self .norm (rb .disjunction )} " ,
373+ f"{ level * self .indent } implication={ self .norm (rb .implication )} " ,
374+ f"{ level * self .indent } activation={ self .activation (rb .activation )} " ,
371375 ]
372376 if rb .rules :
373377 if len (rb .rules ) == 1 :
374- rules = f"{ level * self .indent } rules=[{ self .rule (rb .rules [0 ])} ]"
378+ rules = f"{ level * self .indent } rules=[{ self .rule (rb .rules [0 ])} ]"
375379 else :
376380 rules = (
377- f"{ level * self .indent } rules=[\n { (level + 1 ) * self .indent } "
378- + f",\n { (level + 1 ) * self .indent } " .join (
381+ f"{ level * self .indent } rules=[\n { (level + 1 ) * self .indent } "
382+ + f",\n { (level + 1 ) * self .indent } " .join (
379383 self .rule (rule ) for rule in rb .rules
380384 )
381- + f"\n { level * self .indent } ]"
385+ + f"\n { level * self .indent } ]"
382386 )
383387 result += [rules ]
384388
385389 rule_block = ["fl.RuleBlock(" ]
386390 rule_block += [",\n " .join (result )]
387- rule_block += [f"{ max (0 , level - 1 ) * self .indent } )" ]
391+ rule_block += [f"{ max (0 , level - 1 ) * self .indent } )" ]
388392
389393 return "\n " .join (rule_block )
390394
391395 def term (self , term : "Term" ) -> str :
392- from .operation import Op
393396 from .term import Discrete , Function , Linear
394397
395- result = [f "fl." ]
398+ result = ["fl." ]
396399 if isinstance (term , Discrete ):
397400 result += [
398- f"{ term .class_name } (" f" { self .format (term .name )} , " ,
401+ f"{ term .class_name } ({ self .format (term .name )} , " ,
399402 "[" ,
400403 ", " .join (
401404 self .format (value ) for value in Discrete .values_from (term .xy )
402405 ),
403- "]" " )" ,
406+ "])" ,
404407 ]
405408 elif isinstance (term , Function ):
406409 result += [
0 commit comments