[BACK]Return to polymake.sm1 CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / trans

File: [local] / OpenXM / src / kan96xx / trans / polymake.sm1 (download)

Revision 1.9, Thu Mar 12 07:33:03 2020 UTC (4 years, 2 months ago) by takayama
Branch: MAIN
CVS Tags: HEAD
Changes since 1.8: +2 -1 lines

bug fix of doPolymake; work files /tmp/sm1-q-* were not removed.

% $OpenXM: OpenXM/src/kan96xx/trans/polymake.sm1,v 1.9 2020/03/12 07:33:03 takayama Exp $
% It is a polymake interface

/@@@polymake.ask.which 1 def
/polymake.start { polymake.start.local } def
/polymake.start.local {
  (ox.k0.loaded) boundp {  }
  { [(parse) (ox.sm1) pushfile] extension 
    /@@@polymake.k0.ccc [ ] def
  } ifelse
  @@@polymake.k0.ccc [ ] eq { 
     k0connectr /@@@polymake.k0.ccc oxk0.ccc def /oxk0.ccc [ ] def
     @@@polymake.k0.ccc oxsetmathcap @@@polymake.k0.ccc oxmathcap
  } {  } ifelse
  @@@polymake.k0.ccc 0 get (closed) eq {
     k0connectr /@@@polymake.k0.ccc oxk0.ccc def /oxk0.ccc [ ] def
     @@@polymake.k0.ccc oxsetmathcap @@@polymake.k0.ccc oxmathcap
  } {  } ifelse
  [(parse) ( 1 )] extension pop % BUG, dummy to avoid bus error on mac.2013.09.21 
 @@@polymake.ask.which {
  [(which) (polymake)] oxshell tag 0 eq {
     [(export) (PATH) (=) (/usr/local/polymake/bin:${PATH})] oxshell
     [(which) (polymake)] oxshell tag 0 eq {
       (Polymake is not installed in this system.) error
     } {  } ifelse
  } {  } ifelse
 } { } ifelse
  [(which) (polymake2tfb)] oxshell tag 0 eq {
     (polymake2tfb is not installed in this system.) error
  } {  } ifelse
} def

%[(FACETS) (polymake.data(polymake.POINTS([[1,0,0],[1,1,0],[1,0,1],[1,0,0]])))]
% doPolymake
% [ tfb-string tree error]
[(doPolymake)
[(It calls polymake via oxshell and ox_k0 to make several construction for polytopes.)
 ([action data_in_polymake_tfb_format] doPolymake )
 (         [result_in_tfb result_in_tree errors])
 (polymake, polymake2tfb, ox_k0 must be installed.)
 (cf. @@@polymake.k0.ccc, kan96xx/Doc/oxshell.*, kan96xx/trans/polymake.sm1, oxshell )
 (The variable @@@doPolymake.vars keeps session logs with the polymake)
 (See also usePolymake.local, usePolymake.OoHG.native and usePolymake.OoHG.curl in cgi.sm1)
 (Example:)
% ( [(export) (PATH) (=) (/usr/local/polymake/bin:${PATH})] oxshell )
 $ usePolymake.OoHG.curl polymake.start ; $
 $ [(FACETS) (polymake.data(polymake.POINTS([[1,0,0],[1,1,0],[1,0,1],[1,1,1/2]])))]$
 (         doPolymake /rr set )
 ( Keys---properties are FACETS, CONE_DIM, LINEARITY_DIM, FEASIBLE, AFFINE_FULL, ... )
]] putUsages
/doPolymake { doPolymake.local } def
/doPolymake.local {
  /arg1 set
  [/in-doPolymake  /pAction /pData /pNative /ptree
   /pResult  /pError
  ] pushVariables
  [
    arg1 0 get /pAction set
    arg1 1 get /pData set
    polymake.start

    /pError [ ] def
%% step 1:  polymake tfb ===> polymake native data
    @@@polymake.k0.ccc ( polymake=Object; ) oxexecutestring 
    @@@polymake.k0.ccc ( QuoteMode(1); ) oxexecutestring 
    @@@polymake.k0.ccc [pData ( ;)] cat oxexecutestring 
    @@@polymake.k0.ccc oxpopcmo /ptree set 
    @@@polymake.k0.ccc ( QuoteMode(0); ) oxexecutestring 
    [(treeToPolymake) ptree] extension /pNative set 
    [ptree pNative pAction] /@@@doPolymake.vars set %for debug
%% step 2: calling the polymake
    [(polymake) (stringInOut://pNative) pAction] addStdoutStderr 
    oxshell pop
    pError [@@@stdout @@@stderr] append /pError set
    @@@doPolymake.vars [pNative @@@stdout] append /@@@doPolymake.vars set %for debug
    @@@stdout /pNative set  %output file of polymake is XML file. Use old output format.
%% step 3: polymake native data to polymake tfb
    [(polymake2tfb) (<) (stringIn://pNative) (>) (stringOut://pResult)
     (2>) (stringOut://@@@stderr)] oxshell pop
    pError [@@@stderr] append /pError set
%% step 4: get also tree style data.
    @@@polymake.k0.ccc ( polymake=Object; ) oxexecutestring 
    @@@polymake.k0.ccc ( QuoteMode(1); ) oxexecutestring 
    @@@polymake.k0.ccc [pResult ( ;)] cat oxexecutestring 
    @@@polymake.k0.ccc oxpopcmo /ptree set 
    @@@polymake.k0.ccc ( QuoteMode(0); ) oxexecutestring 
    [pResult ptree pError] /arg1 set
  ] pop
  popVariables
  arg1
} def

[(tfbToTree)
[(tfb-expression-in-string tfbToTree tree)
 (tfbToTree translates expressions in tfb/2 into tree form.)
 (Bug: the input is parsed by k0, so the symbol name given agrees with)
 (     a k0 symbol, it returns a strange answer.)
 $Example:  ( C+intpath.circle(0,1/2) ) tfbToTree :: $
]] putUsages

/tfbToTree {
  /arg1 set
  [/in-tfbToTree  /pAction /pData /pNative /ptree
   /pResult  /pError /i
  ] pushVariables
  [
    arg1 /pData set
    polymake.start

    /pError [ ] def
%%  tfb ===> CMO tree.
    @@@polymake.k0.ccc ( QuoteMode(1); ) oxexecutestring 
    @@@polymake.k0.ccc [pData ( ;)] cat oxexecutestring 
    @@@polymake.k0.ccc oxpopcmo /ptree set 
    @@@polymake.k0.ccc ( QuoteMode(0); ) oxexecutestring 
    /arg1 ptree def
  ] pop
  popVariables
  arg1
} def