Comprehensive reorganisation of the Python part of Coriolis.

* Move all Python stuff under a common Python namespace "coriolis".
* Instead of having a series subtrees for each tool, integrate
  everything in one common tree. So now, all components can be
  located either with an absolute path from "coriolis" or, inside
  cross-reference themselves through relatives imports.
* As a consequence, we only need to add ".../site-packages/coriolis/"
  to the PYTHONPATH, and not a whole bunch of subdirectories.
  And nothing, if installed in-system.
* The tree of free technologies configuration files is also moved
  below "coriolis/technos" instead of "/etc".
* Supressed "cumulus" level for the plugins.
* All python modules are rewritten using relative imports except
  for the configuration files that uses absolute import as they
  can be cloned outside of the tree to serve as templates.

* Change: In boostrap/FindPythonSitePackages, include "/coriolis" in
    Python_CORIOLISARCH and Python_CORIOLISLIB.
      Provide a Python_SITELIB *without* "/coriolis" appended.
* Change: In cumulus/plugins/__init__.loadPlugins(), must prefix modules
    read in the plugins directory by "coriolis.plugins.". No longer need
    to add their path to sys.path.
* Change: In crlcore/python/technos/nodeX/*/devices.py, the scripts of
    the layouts generators must be prefixed by "coriolis.oroshi.".
* Change: In CRL::System CTOR, no longer add the pathes of the various
    plugins to sys.path. Only "site-packages/coriolis/".
* New: In Utilities::Path::toPyModePath(), new method to convert a
    filesystem path into a python module path.
      Examples:
        "coriolis/plugins/block"    --> "coriolis.plugins.block".
        "coriolis/plugins/rsave.py" --> "coriolis.plugins.rsave".
* Change: In katanaEngine::_runKatanaEngine(), rename the hook script
    initHook.py. No longer need to modify sys.path.
* Change: In BoraEngine::_runBoraEngine(), rename the hook script
    initHook.py. No longer need to modify sys.path.
* Change: In UnicornGui::_runUnicornInit(), rename the hook script
    initHook.py. No longer need to modify sys.path.
* Change: In cumulus.plugins.chip.constants, put the constants
    outside __init__.py to avoid a loop at initialization.
This commit is contained in:
Jean-Paul Chaput 2023-02-27 22:14:32 +01:00
parent c37e6ff953
commit 1557d613ae
284 changed files with 5917 additions and 6225 deletions

View File

@ -9,7 +9,7 @@ if(UNIX AND NOT POETRY)
execute_process(COMMAND "${Python_EXECUTABLE}" "-c" "${SCRIPT}"
RESULT_VARIABLE RETURN_CODE
OUTPUT_VARIABLE Python_CORIOLISARCH
OUTPUT_VARIABLE Python_SITEARCH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
@ -19,7 +19,7 @@ if(UNIX AND NOT POETRY)
execute_process(COMMAND "${Python_EXECUTABLE}" "-c" "${SCRIPT}"
RESULT_VARIABLE RETURN_CODE
OUTPUT_VARIABLE Python_CORIOLISLIB
OUTPUT_VARIABLE Python_SITELIB
OUTPUT_STRIP_TRAILING_WHITESPACE
)
@ -29,12 +29,15 @@ if(UNIX AND NOT POETRY)
set(FindPythonSitePackages_FOUND FALSE)
endif(RETURN_CODE EQUAL 0)
set(Python_CORIOLISARCH "lib${LIB_SUFFIX}/${Python_CORIOLISARCH}"
CACHE STRING "Python platform dependent install directory." FORCE)
set(Python_CORIOLISLIB "lib${LIB_SUFFIX}/${Python_CORIOLISLIB}"
CACHE STRING "Python platform independent install directory." FORCE)
set(Python_CORIOLISARCH "lib${LIB_SUFFIX}/${Python_SITEARCH}/coriolis"
CACHE STRING "Python platform dependent install directory (Coriolis modules)." FORCE)
set(Python_SITELIB "lib${LIB_SUFFIX}/${Python_SITELIB}"
CACHE STRING "Python platform independent install directory." FORCE)
set(Python_CORIOLISLIB "${Python_SITELIB}/coriolis"
CACHE STRING "Python platform independent install directory (Coriolis modules)." FORCE)
mark_as_advanced(Python_CORIOLISARCH)
mark_as_advanced(Python_CORIOLISLIB)
mark_as_advanced(Python_SITELIB)
if(FindPythonSitePackages_FOUND)
if(NOT FindPythonSitePackages_FIND_QUIETLY)

View File

@ -288,12 +288,12 @@ if __name__ == "__main__":
if os.path.isdir(pyPackageDir):
sitePackagesDir = pyPackageDir
break
strippedPythonPath = "%s:" % (sitePackagesDir) + strippedPythonPath
strippedPythonPath = "%s/crlcore:" % (sitePackagesDir) + strippedPythonPath
strippedPythonPath = "%s/cumulus:" % (sitePackagesDir) + strippedPythonPath
strippedPythonPath = "%s/cumulus/plugins:" % (sitePackagesDir) + strippedPythonPath
strippedPythonPath = "%s/stratus:" % (sitePackagesDir) + strippedPythonPath
strippedPythonPath = "%s:" % (sysconfDir) + strippedPythonPath
strippedPythonPath = "%s" % (sitePackagesDir) + strippedPythonPath
#strippedPythonPath = "%s/crlcore:" % (sitePackagesDir) + strippedPythonPath
#strippedPythonPath = "%s/cumulus:" % (sitePackagesDir) + strippedPythonPath
#strippedPythonPath = "%s/cumulus/plugins:" % (sitePackagesDir) + strippedPythonPath
#strippedPythonPath = "%s/stratus:" % (sitePackagesDir) + strippedPythonPath
#strippedPythonPath = "%s:" % (sysconfDir) + strippedPythonPath
shellScriptSh += 'PYTHONPATH="%(PYTHONPATH)s";' \
'export PYTHONPATH;'
shellScriptCsh += 'setenv PYTHONPATH "%(PYTHONPATH)s";'

View File

@ -1,2 +1,2 @@
install ( FILES boraInit.py DESTINATION ${Python_CORIOLISLIB}/bora )
install ( FILES initHook.py DESTINATION ${Python_CORIOLISLIB}/bora )

View File

@ -16,7 +16,7 @@ def boraHook ( **kw ):
if 'bora' in kw:
bora = kw['bora']
else:
print( ErrorMessage( 3, 'boraHook(): Must be run from a BoraEngine.' ))
print( ErrorMessage( 3, 'bora.initHook(): Must be run from a BoraEngine.' ))
return
try:
userInit = os.path.join( os.getcwd(), 'coriolis2/bora.py' )

View File

@ -111,17 +111,17 @@ namespace Bora {
void BoraEngine::_runBoraInit ()
{
Utilities::Path pythonSitePackages = System::getPath("pythonSitePackages");
Utilities::Path systemConfDir = pythonSitePackages / "bora";
Utilities::Path systemConfFile = systemConfDir / "boraInit.py";
Utilities::Path confFile = "coriolis/bora/initHook.py";
Utilities::Path systemConfFile = pythonSitePackages / confFile;
if (systemConfFile.exists()) {
Isobar::Script::addPath( systemConfDir.toString() );
//Isobar::Script::addPath( systemConfDir.toString() );
dbo_ptr<Isobar::Script> script = Isobar::Script::create( systemConfFile.stem().toString() );
dbo_ptr<Isobar::Script> script = Isobar::Script::create( confFile.toPyModPath() );
script->addKwArgument( "bora" , (PyObject*)PyBoraEngine_Link(this) );
script->runFunction ( "boraHook", getCell() );
Isobar::Script::removePath( systemConfDir.toString() );
//Isobar::Script::removePath( systemConfDir.toString() );
} else {
cerr << Warning( "Bora system configuration file:\n <%s> not found."
, systemConfFile.toString().c_str() ) << endl;

View File

@ -41,6 +41,5 @@
add_subdirectory(src)
add_subdirectory(python)
add_subdirectory(etc)
add_subdirectory(cmake_modules)
add_subdirectory(doc)

View File

@ -1,7 +0,0 @@
install( DIRECTORY common DESTINATION ${SYS_CONF_DIR}/coriolis2 )
install( DIRECTORY symbolic DESTINATION ${SYS_CONF_DIR}/coriolis2 )
install( DIRECTORY node45 DESTINATION ${SYS_CONF_DIR}/coriolis2 )
install( DIRECTORY node180 DESTINATION ${SYS_CONF_DIR}/coriolis2 )
install( DIRECTORY node600 DESTINATION ${SYS_CONF_DIR}/coriolis2 )

View File

@ -1,136 +0,0 @@
# This file is part of the Coriolis Software.
# Copyright (c) Sorbonne Université 2019-2021, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
# | Alliance / Hurricane Interface |
# | |
# | Author : Jean-Paul CHAPUT |
# | E-mail : Jean-Paul.Chaput@lip6.fr |
# | =============================================================== |
# | Python : "./node180/scn6m_deep_09/devices.py" |
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "{}".'.format(helpers.truncPath(__file__)) )
import common.devices
from common.devices import addDevice
chamsDir = helpers.sysConfDir + '/share/coriolis2/'
spiceDir = chamsDir + 'spice/'
addDevice( name = 'DifferentialPairBulkConnected'
, spice = spiceDir+'DiffPairBulkConnected.spi'
, connectors = ( 'D1', 'D2', 'G1', 'G2', 'S' )
, layouts = ( ('Horizontal M2' , 'DP_horizontalM2.py' )
, ('Symmetrical' , 'DP_symmetrical.py' )
, ('Common centroid', 'DP_2DCommonCentroid.py')
, ('Interdigitated' , 'DP_interdigitated.py' )
, ('WIP DP' , 'wip_dp.py' )
)
)
addDevice( name = 'DifferentialPairBulkUnconnected'
, spice = spiceDir+'DiffPairBulkUnconnected.spi'
, connectors = ( 'D1', 'D2', 'G1', 'G2', 'S', 'B' )
, layouts = ( ('Horizontal M2' , 'DP_horizontalM2.py' )
, ('Symmetrical' , 'DP_symmetrical.py' )
, ('Common centroid', 'DP_2DCommonCentroid.py')
, ('Interdigitated' , 'DP_interdigitated.py' )
, ('WIP DP' , 'wip_dp.py' )
)
)
addDevice( name = 'LevelShifterBulkUnconnected'
, spice = spiceDir+'LevelShifterBulkUnconnected.spi'
, connectors = ( 'D1', 'D2', 'S1', 'S2', 'B' )
, layouts = ( ('Horizontal M2' , 'LS_horizontalM2.py' )
, ('Symmetrical' , 'LS_symmetrical.py' )
, ('Common centroid', 'LS_2DCommonCentroid.py')
, ('Interdigitated' , 'LS_interdigitated.py' )
)
)
addDevice( name = 'TransistorBulkConnected'
, spice = spiceDir+'TransistorBulkConnected.spi'
, connectors = ( 'D', 'G', 'S' )
, layouts = ( ('Rotate transistor', 'Transistor_rotate.py')
, ('Common transistor', 'Transistor_common.py')
, ('WIP Transistor' , 'wip_transistor.py' )
)
)
addDevice( name = 'TransistorBulkUnconnected'
, spice = spiceDir+'TransistorBulkUnconnected.spi'
, connectors = ( 'D', 'G', 'S', 'B' )
, layouts = ( ('Rotate transistor', 'Transistor_rotate.py')
, ('Common transistor', 'Transistor_common.py')
, ('WIP Transistor' , 'wip_transistor.py' )
)
)
addDevice( name = 'CrossCoupledPairBulkConnected'
, spice = spiceDir+'CCPairBulkConnected.spi'
, connectors = ( 'D1', 'D2', 'S' )
, layouts = ( ('Horizontal M2' , 'CCP_horizontalM2.py' )
, ('Symmetrical' , 'CCP_symmetrical.py' )
, ('Common centroid', 'CCP_2DCommonCentroid.py')
, ('Interdigitated' , 'CCP_interdigitated.py' )
)
)
addDevice( name = 'CrossCoupledPairBulkUnconnected'
, spice = spiceDir+'CCPairBulkUnconnected.spi'
, connectors = ( 'D1', 'D2', 'S', 'B' )
, layouts = ( ('Horizontal M2' , 'CCP_horizontalM2.py' )
, ('Symmetrical' , 'CCP_symmetrical.py' )
, ('Common centroid', 'CCP_2DCommonCentroid.py')
, ('Interdigitated' , 'CCP_interdigitated.py' )
)
)
addDevice( name = 'CommonSourcePairBulkConnected'
, spice = spiceDir+'CommonSourcePairBulkConnected.spi'
, connectors = ( 'D1', 'D2', 'S', 'G' )
, layouts = ( ('Horizontal M2' , 'CSP_horizontalM2.py' )
, ('Symmetrical' , 'CSP_symmetrical.py' )
, ('Interdigitated' , 'CSP_interdigitated.py' )
, ('WIP CSP' , 'wip_csp.py' )
)
)
addDevice( name = 'CommonSourcePairBulkUnconnected'
, spice = spiceDir+'CommonSourcePairBulkUnconnected.spi'
, connectors = ( 'D1', 'D2', 'S', 'G', 'B' )
, layouts = ( ('Horizontal M2' , 'CSP_horizontalM2.py' )
, ('Symmetrical' , 'CSP_symmetrical.py' )
, ('Interdigitated' , 'CSP_interdigitated.py' )
, ('WIP CSP' , 'wip_csp.py' )
)
)
addDevice( name = 'SimpleCurrentMirrorBulkConnected'
, spice = spiceDir+'CurrMirBulkConnected.spi'
, connectors = ( 'D1', 'D2', 'S' )
, layouts = ( ('Horizontal M2' , 'SCM_horizontalM2.py' )
, ('Symmetrical' , 'SCM_symmetrical.py' )
, ('Common centroid', 'SCM_2DCommonCentroid.py')
, ('Interdigitated' , 'SCM_interdigitated.py' )
)
)
addDevice( name = 'SimpleCurrentMirrorBulkUnconnected'
, spice = spiceDir+'CurrMirBulkUnconnected.spi'
, connectors = ( 'D1', 'D2', 'S', 'B' )
, layouts = ( ('Horizontal M2' , 'SCM_horizontalM2.py' )
, ('Symmetrical' , 'SCM_symmetrical.py' )
, ('Common centroid', 'SCM_2DCommonCentroid.py')
, ('Interdigitated' , 'SCM_interdigitated.py' )
)
)
addDevice( name = 'MultiCapacitor'
#, spice = spiceDir+'MIM_OneCapacitor.spi'
#, connectors = ( 'T1', 'B1' )
, layouts = ( ('Matrix', 'capacitormatrix.py' ),
)
)
addDevice( name = 'Resistor'
#, spice = spiceDir+'MIM_OneCapacitor.spi'
, connectors = ( 'PIN1', 'PIN2' )
, layouts = ( ('Snake', 'resistorsnake.py' ),
)
)

View File

@ -1,7 +1,15 @@
install( FILES __init__.py DESTINATION ${Python_CORIOLISLIB} )
install( FILES helpers/__init__.py DESTINATION ${Python_CORIOLISLIB}/helpers )
install( FILES helpers/io.py DESTINATION ${Python_CORIOLISLIB}/helpers )
install( FILES helpers/utils.py DESTINATION ${Python_CORIOLISLIB}/helpers )
install( FILES helpers/overlay.py DESTINATION ${Python_CORIOLISLIB}/helpers )
install( FILES helpers/analogtechno.py DESTINATION ${Python_CORIOLISLIB}/helpers )
install( FILES helpers/technology.py DESTINATION ${Python_CORIOLISLIB}/helpers )
install( FILES technos/__init__.py DESTINATION ${Python_CORIOLISLIB}/technos )
install( DIRECTORY technos/common DESTINATION ${Python_CORIOLISLIB}/technos )
install( DIRECTORY technos/symbolic DESTINATION ${Python_CORIOLISLIB}/technos )
install( DIRECTORY technos/node600 DESTINATION ${Python_CORIOLISLIB}/technos )
install( DIRECTORY technos/node180 DESTINATION ${Python_CORIOLISLIB}/technos )
install( DIRECTORY technos/node45 DESTINATION ${Python_CORIOLISLIB}/technos )

View File

@ -39,11 +39,10 @@ if not sysModules:
for moduleName in sys.modules.keys():
sysModules.add( moduleName )
import Hurricane
import Viewer
import CRL
import helpers.io
from helpers.io import ErrorMessage
from ..Hurricane import DbU, DataBase, Net
from ..Viewer import Graphics
from ..CRL import AllianceFramework
from .io import ErrorMessage, WarningMessage
def irange ( value ):
@ -77,67 +76,6 @@ def truncPath ( path, maxlength=80 ):
return '...' + os.sep + trunc
def textStackTrace ( trace, showIndent=True, scriptPath=None ):
indent = ''
if showIndent: indent = ' '
s = ''
if scriptPath:
if len(scriptPath) > 100:
filename = scriptPath[-100:]
filename = '.../' + filename[ filename.find('/')+1 : ]
if showIndent: s += '[ERROR] '
s += 'An exception occured while loading the Python script module:\n'
s += indent + '\"{}\"\n' % (filename)
s += indent + 'You should check for simple python errors in this module.\n\n'
s += indent + 'Python stack trace:\n'
maxdepth = len( trace )
for depth in range( maxdepth ):
filename, line, function, code = trace[ maxdepth-depth-1 ]
if len(filename) > 58:
filename = filename[-58:]
filename = '.../' + filename[ filename.find('/')+1 : ]
#s += indent + '[%02d] %45s:%-5d in \"{}()\"' % ( maxdepth-depth-1, filename, line, function )
s += indent + '#{} in {:>25}() at {}:{}\n'.format( depth, function, filename, line )
return s
def showStackTrace ( trace ):
print( textStackTrace( trace, True ))
return
def textPythonTrace ( scriptPath=None, e=None, tryContinue=True ):
s = ''
if scriptPath:
if len(scriptPath) > 100:
filename = scriptPath[-100:]
filename = '.../' + filename[ filename.find('/')+1 : ]
else:
filename = scriptPath
s += '[ERROR] An exception occured while loading the Python script module:\n'
s += ' \"{}\"\n'.format(filename)
s += ' You should check for simple python errors in this module.\n'
if isinstance(e,helpers.io.ErrorMessage):
trace = e.trace
s += textStackTrace( trace )
if e:
s += ' Error was:\n'
s += ' {}\n'.format(e)
else:
#trace = traceback.extract_tb( sys.exc_info()[2] )
print( traceback.format_exc() )
if tryContinue:
s += ' Trying to continue anyway...'
return s
def showPythonTrace ( scriptPath=None, e=None, tryContinue=True ):
print( textPythonTrace( scriptPath, e, tryContinue ))
return
class Dots ( object ):
def __init__ (self, header="", width=73):
@ -260,13 +198,13 @@ def overload ( defaultParameters, parameters ):
return tuple(overloadParameters)
def l ( value ): return Hurricane.DbU.fromLambda( value )
def u ( value ): return Hurricane.DbU.fromPhysical( value, Hurricane.DbU.UnitPowerMicro )
def n ( value ): return Hurricane.DbU.fromPhysical( value, Hurricane.DbU.UnitPowerNano )
def l ( value ): return DbU.fromLambda( value )
def u ( value ): return DbU.fromPhysical( value, DbU.UnitPowerMicro )
def n ( value ): return DbU.fromPhysical( value, DbU.UnitPowerNano )
def onFGrid ( u ):
oneGrid = Hurricane.DbU.fromGrid( 1.0 )
oneGrid = DbU.fromGrid( 1.0 )
if u % oneGrid:
u -= (u % oneGrid)
return u
@ -313,7 +251,7 @@ def setNdaTopDir ( ndaTopDirArg ):
global ndaTopDir
if not os.path.isdir(ndaTopDirArg):
print( helpers.io.WarningMessage( 'helpers.setNdaTopDir(): Directory "{}" does not exists.'.format( ndaTopDirArg )))
print( WarningMessage( 'helpers.setNdaTopDir(): Directory "{}" does not exists.'.format( ndaTopDirArg )))
else:
ndaTopDir = ndaTopDirArg
sys.path.append( os.path.join(ndaTopDir,'etc/coriolis2') )
@ -379,20 +317,20 @@ def setSysConfDir ( quiet=False ):
def netDirectionToStr ( netDir ):
flags = [ '-', '-', '-', '-', '-' ]
if netDir & Hurricane.Net.Direction.DirIn: flags[0] = 'i'
if netDir & Hurricane.Net.Direction.DirOut: flags[1] = 'o'
if netDir & Hurricane.Net.Direction.ConnTristate: flags[2] = 't'
if netDir & Hurricane.Net.Direction.ConnWiredOr: flags[3] = 'w'
if netDir & Net.Direction.DirIn: flags[0] = 'i'
if netDir & Net.Direction.DirOut: flags[1] = 'o'
if netDir & Net.Direction.ConnTristate: flags[2] = 't'
if netDir & Net.Direction.ConnWiredOr: flags[3] = 'w'
s = flags[0]+flags[1]+flags[2]+flags[3]+' '
if netDir == Hurricane.Net.Direction.UNDEFINED: s += '(UNDEFINED)'
elif netDir == Hurricane.Net.Direction.IN: s += '(IN)'
elif netDir == Hurricane.Net.Direction.OUT: s += '(OUT)'
elif netDir == Hurricane.Net.Direction.INOUT: s += '(INOUT)'
elif netDir == Hurricane.Net.Direction.TRISTATE: s += '(TRISTATE)'
elif netDir == Hurricane.Net.Direction.TRANSCV: s += '(TRANSCV)'
elif netDir == Hurricane.Net.Direction.WOR_OUT: s += '(WOR_OUT)'
elif netDir == Hurricane.Net.Direction.WOR_INOUT: s += '(WOR_INOUT)'
if netDir == Net.Direction.UNDEFINED: s += '(UNDEFINED)'
elif netDir == Net.Direction.IN: s += '(IN)'
elif netDir == Net.Direction.OUT: s += '(OUT)'
elif netDir == Net.Direction.INOUT: s += '(INOUT)'
elif netDir == Net.Direction.TRISTATE: s += '(TRISTATE)'
elif netDir == Net.Direction.TRANSCV: s += '(TRANSCV)'
elif netDir == Net.Direction.WOR_OUT: s += '(WOR_OUT)'
elif netDir == Net.Direction.WOR_INOUT: s += '(WOR_INOUT)'
else: s += '(UNKNOWN)'
return s
@ -410,10 +348,10 @@ def unloadUserSettings ():
warning = ''
if refcount > 3:
warning = '(NOTE: More than 3 refcount %d)' % refcount
#print( helpers.io.WarningMessage( [ 'Configuration module "{}" has more than 3 references ({})".' \
# .format(moduleName,refcount)
# , 'May be unable to unload it from the Python process.'
# ] ))
#print( WarningMessage( [ 'Configuration module "{}" has more than 3 references ({})".' \
# .format(moduleName,refcount)
# , 'May be unable to unload it from the Python process.'
# ] ))
print( ' - {:-34} {:-35}'.format( '"{}".'.format(moduleName), warning ))
del sys.modules[ moduleName ]
confModules = set()
@ -421,7 +359,7 @@ def unloadUserSettings ():
def loadUserSettings ():
if Hurricane.DataBase.getDB() is not None:
if DataBase.getDB() is not None:
print( ' o DataBase already initialized, skip loading of "./coriolis2/settings.py".' )
return True
rvalue = False
@ -431,9 +369,9 @@ def loadUserSettings ():
import coriolis2.settings
rvalue = True
else:
print( helpers.io.WarningMessage( [ 'User\'s settings directory "{}" exists, but do not contains "__init__.py".'.format( './coriolis2/' )
, '(path:"{}")'.format( os.path.abspath(os.getcwd()) )
] ))
print( WarningMessage( [ 'User\'s settings directory "{}" exists, but do not contains "__init__.py".'.format( './coriolis2/' )
, '(path:"{}")'.format( os.path.abspath(os.getcwd()) )
] ))
else:
import symbolic.cmos
tagConfModules()
@ -452,8 +390,8 @@ def tagConfModules ():
def resetCoriolis ():
print( ' o Full reset of Coriolis/Hurricane databases.' )
CRL.AllianceFramework.get().destroy()
Viewer.Graphics.get().clear()
Hurricane.DataBase.getDB().destroy()
AllianceFramework.get().destroy()
Graphics.get().clear()
DataBase.getDB().destroy()
unloadUserSettings()
return

View File

@ -2,7 +2,7 @@
# -*- Mode:Python -*-
#
# This file is part of the Coriolis Software.
# Copyright (c) Sorbonne Université 2015-2021, All Rights Reserved
# Copyright (c) Sorbonne Université 2015-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -18,11 +18,8 @@
import os
import os.path
import sys
import Hurricane
from Hurricane import DbU
from Hurricane import DataBase
from Hurricane import Layer
from helpers.io import catch, ErrorMessage, WarningMessage
from ..Hurricane import DbU, DataBase, Layer
from .io import catch, ErrorMessage, WarningMessage
tech = None

View File

@ -19,10 +19,70 @@ import os
import os.path
import re
import traceback
import Cfg
import helpers
from Hurricane import UpdateSession
import Viewer
from .. import Cfg
from ..Hurricane import UpdateSession
from ..Viewer import Graphics, ErrorWidget
def textStackTrace ( trace, showIndent=True, scriptPath=None ):
indent = ''
if showIndent: indent = ' '
s = ''
if scriptPath:
if len(scriptPath) > 100:
filename = scriptPath[-100:]
filename = '.../' + filename[ filename.find('/')+1 : ]
if showIndent: s += '[ERROR] '
s += 'An exception occured while loading the Python script module:\n'
s += indent + '\"{}\"\n' % (filename)
s += indent + 'You should check for simple python errors in this module.\n\n'
s += indent + 'Python stack trace:\n'
maxdepth = len( trace )
for depth in range( maxdepth ):
filename, line, function, code = trace[ maxdepth-depth-1 ]
if len(filename) > 58:
filename = filename[-58:]
filename = '.../' + filename[ filename.find('/')+1 : ]
#s += indent + '[%02d] %45s:%-5d in \"{}()\"' % ( maxdepth-depth-1, filename, line, function )
s += indent + '#{} in {:>25}() at {}:{}\n'.format( depth, function, filename, line )
return s
def showStackTrace ( trace ):
print( textStackTrace( trace, True ))
return
def textPythonTrace ( scriptPath=None, e=None, tryContinue=True ):
s = ''
if scriptPath:
if len(scriptPath) > 100:
filename = scriptPath[-100:]
filename = '.../' + filename[ filename.find('/')+1 : ]
else:
filename = scriptPath
s += '[ERROR] An exception occured while loading the Python script module:\n'
s += ' \"{}\"\n'.format(filename)
s += ' You should check for simple python errors in this module.\n'
if isinstance(e,ErrorMessage):
trace = e.trace
s += textStackTrace( trace )
if e:
s += ' Error was:\n'
s += ' {}\n'.format(e)
else:
#trace = traceback.extract_tb( sys.exc_info()[2] )
print( traceback.format_exc() )
if tryContinue:
s += ' Trying to continue anyway...'
return s
def showPythonTrace ( scriptPath=None, e=None, tryContinue=True ):
print( textPythonTrace( scriptPath, e, tryContinue ))
return
# -------------------------------------------------------------------
@ -100,10 +160,10 @@ class ErrorMessage ( Exception ):
@staticmethod
def show ( code, *arguments ):
e = ErrorMessage( code, *arguments )
if not Viewer.Graphics.get().isEnabled():
if not Graphics.get().isEnabled():
raise e
tryCont = Viewer.ErrorWidget.run( e.getLinesAsString()
, helpers.textStackTrace( e.trace, False, e.scriptPath ))
tryCont = ErrorWidget.run( e.getLinesAsString()
, textStackTrace( e.trace, False, e.scriptPath ))
if not tryCont: raise e
return
@ -122,10 +182,10 @@ def catch ( errorObject ):
em.trace = traceback.extract_tb( sys.exc_info()[2] )
#em.scriptPath = __file__
print( em )
print( helpers.textStackTrace( em.trace, True, em.scriptPath ))
if Viewer.Graphics.get().isEnabled():
Viewer.ErrorWidget.run( em.getLinesAsString()
, helpers.textStackTrace( em.trace, False, em.scriptPath ))
print( textStackTrace( em.trace, True, em.scriptPath ))
if Graphics.get().isEnabled():
ErrorWidget.run( em.getLinesAsString()
, textStackTrace( em.trace, False, em.scriptPath ))
if UpdateSession.getStackSize() > 0: UpdateSession.close()
return

View File

@ -25,9 +25,9 @@ Contains:
* ``overlay.CfgCache`` : A cache for Cfg parameters.
"""
import Cfg
import Hurricane
from .io import isVL
from .. import Cfg
from .. import Hurricane
from .io import isVL
class UpdateSession ( object ):

View File

@ -17,7 +17,7 @@
Some helpers to create or load a technology and it's libraries.
"""
from Hurricane import DataBase, Library, BasicLayer, Layer, ViaLayer
from ..Hurricane import DataBase, Library, BasicLayer, Layer, ViaLayer
__all__ = [ 'safeGetLibrary', 'createBL', 'setEnclosures' ]

View File

@ -0,0 +1,9 @@
install( FILES __init__.py DESTINATION ${SYS_CONF_DIR} )
install( FILES __init__.py DESTINATION ${SYS_CONF_DIR}/coriolis2 )
install( DIRECTORY common DESTINATION ${SYS_CONF_DIR}/coriolis2 )
install( DIRECTORY symbolic DESTINATION ${SYS_CONF_DIR}/coriolis2 )
install( DIRECTORY node45 DESTINATION ${SYS_CONF_DIR}/coriolis2 )
install( DIRECTORY node180 DESTINATION ${SYS_CONF_DIR}/coriolis2 )
install( DIRECTORY node600 DESTINATION ${SYS_CONF_DIR}/coriolis2 )

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,9 +13,9 @@
# +-----------------------------------------------------------------+
from Hurricane import DataBase
import helpers.io
from helpers.io import ErrorMessage
from coriolis.Hurricane import DataBase
from coriolis.helpers import stype
from coriolis.helpers.io import catch, ErrorMessage
def loadGdsLayers ( gdsLayersTable ):
@ -32,13 +32,13 @@ def loadGdsLayers ( gdsLayersTable ):
if not isinstance(gdsiiLayer,int):
raise ErrorMessage( 1, ['Incoherency in <gdsLayersTable> entry.'
,'GDSII layer number is not of int type (%s).' \
% helpers.stype(gdsiiLayer)
% stype(gdsiiLayer)
,str(entry)
] )
if not isinstance(gdsiiDatatype,int):
raise ErrorMessage( 1, ['Incoherency in <gdsLayersTable> entry.'
,'GDSII layer Datatype is not of int type (%s).' \
% helpers.stype(gdsiiDatatype)
% stype(gdsiiDatatype)
,str(entry)
] )
@ -55,5 +55,5 @@ def loadGdsLayers ( gdsLayersTable ):
basicLayer.setGds2Datatype( gdsiiDatatype )
except Exception as e:
helpers.io.catch( e )
catch( e )
return

View File

@ -1,24 +1,23 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
# | Alliance / Hurricane Interface |
# | |
# | Author : Jean-Paul CHAPUT |
# | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
# | E-mail : Jean-Paul.Chaput@lip6.fr |
# | =============================================================== |
# | Python : "./etc/common/analog.py" |
# +-----------------------------------------------------------------+
import Cfg
import helpers
import coriolis.Cfg as Cfg
from coriolis.helpers import technoDir
p = Cfg.getParamString( 'analog.techno' )
p.setString( 'Analog_technology_has_not_been_set' )
p.flags = Cfg.Parameter.Flags.NeedRestart|Cfg.Parameter.Flags.MustExist
#Cfg.getParamString( 'analog.devices' ).setString( helpers.technoDir+'/devices.conf' )
#Cfg.getParamString( 'analog.devices' ).setString( technoDir+'/devices.conf' )

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -14,7 +14,7 @@
import string
from helpers.io import ErrorMessage
from coriolis.helpers.io import ErrorMessage
stdColors = \

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) Sorbonne Université 2019-2021, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,10 +13,8 @@
# +-----------------------------------------------------------------+
from Hurricane import DataBase
import helpers.io
from helpers.io import ErrorMessage
from helpers.io import WarningMessage
from coriolis.Hurricane import DataBase
from coriolis.helpers.io import catch, ErrorMessage, WarningMessage
tech = DataBase.getDB().getTechnology()
@ -42,5 +40,5 @@ def addDevice ( **kw ):
print( WarningMessage( 'common.addDevice(): Missing layouts on device "{}".' \
.format( kw['name'] )))
except Exception as e:
helpers.io.catch( e )
catch( e )
return

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,11 +13,11 @@
# +-----------------------------------------------------------------+
import Cfg
import Viewer
from helpers import overlay, l, u, n
from common.colors import toRGB
from common.patterns import toHexa
import coriolis.Cfg as Cfg
import coriolis.Viewer as Viewer
from coriolis.helpers import overlay, l, u, n
from coriolis.technos.common.colors import toRGB
from coriolis.technos.common.patterns import toHexa
def createStyles ( scale=1.0 ):

View File

@ -1,19 +1,19 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
# | Alliance / Hurricane Interface |
# | |
# | Author : Jean-Paul CHAPUT |
# | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
# | E-mail : Jean-Paul.Chaput@lip6.fr |
# | =============================================================== |
# | Python : "./etc/common/etesian.py" |
# +-----------------------------------------------------------------+
import Cfg
import coriolis.Cfg as Cfg
param = Cfg.getParamDouble( 'etesian.aspectRatio' )

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,7 +13,7 @@
# +-----------------------------------------------------------------+
import Cfg
import coriolis.Cfg as Cfg
layout = Cfg.Configuration.get().getLayout()

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) Sorbonne Université 2019-2021, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,7 +13,7 @@
# +-----------------------------------------------------------------+
import Cfg
import coriolis.Cfg as Cfg
Cfg.getParamBool( 'misc.catchCore' ).setBool( False )

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) Sorbonne Universit 2019-2021, All Rights Reserved
# Copyright (c) Sorbonne Universit 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -15,10 +15,8 @@
import sys
import math
import helpers
from helpers import irange
from helpers.io import ErrorMessage
from helpers.io import WarningMessage
from coriolis.helpers import irange
from coriolis.helpers.io import ErrorMessage, WarningMessage
class Pattern ( object ):

View File

@ -1,19 +1,19 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
# | Alliance / Hurricane Interface |
# | |
# | Author : Jean-Paul CHAPUT |
# | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
# | E-mail : Jean-Paul.Chaput@lip6.fr |
# | =============================================================== |
# | Python : "./etc/common/stratus1.py" |
# +-----------------------------------------------------------------+
import Cfg
import coriolis.Cfg as Cfg
layout = Cfg.Configuration.get().getLayout()
layout.addTab ( 'stratus1', 'Stratus1' )

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,16 +13,10 @@
# +-----------------------------------------------------------------+
from helpers import l, u, n
from Hurricane import DataBase
from Hurricane import Technology
from Hurricane import Layer
from Hurricane import BasicLayer
from Hurricane import DiffusionLayer
from Hurricane import TransistorLayer
from Hurricane import RegularLayer
from Hurricane import ContactLayer
from Hurricane import ViaLayer
from coriolis.helpers import l, u, n
from coriolis.Hurricane import DataBase, Technology, Layer, BasicLayer, \
DiffusionLayer, TransistorLayer, \
RegularLayer, ContactLayer, ViaLayer
tech = DataBase.getDB().getTechnology()

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,31 +13,32 @@
# +-----------------------------------------------------------------+
import Cfg
import helpers.io
helpers.io.vprint( 1, ' o Loading "node180.scn6m_deep_09" technology.' )
helpers.io.vprint( 2, ' - "{}".'.format(helpers.truncPath(__file__)) )
import coriolis.Cfg as Cfg
from coriolis.helpers import truncPath, tagConfModules
from coriolis.helpers.io import vprint
vprint( 1, ' o Loading "node180.scn6m_deep_09" technology.' )
vprint( 2, ' - "{}".'.format(truncPath(__file__)) )
from Hurricane import DataBase
from CRL import System
from coriolis.Hurricane import DataBase
from coriolis.CRL import System
Cfg.Configuration.pushDefaultPriority( Cfg.Parameter.Priority.ConfigurationFile )
DataBase.create()
System.get()
import node180.scn6m_deep_09.misc
import node180.scn6m_deep_09.technology
import node180.scn6m_deep_09.display
import node180.scn6m_deep_09.analog
import node180.scn6m_deep_09.alliance
import node180.scn6m_deep_09.etesian
import node180.scn6m_deep_09.kite
import node180.scn6m_deep_09.plugins
import node180.scn6m_deep_09.stratus1
import node180.scn6m_deep_09.devices
import node180.scn6m_deep_09.dtr_scn6m_deep_09
from . import misc
from . import technology
from . import display
from . import analog
from . import alliance
from . import etesian
from . import kite
from . import plugins
from . import stratus1
from . import devices
from . import dtr_scn6m_deep_09
Cfg.Configuration.popDefaultPriority()
helpers.tagConfModules()
tagConfModules()

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) Sorbonne Université 2019-2021, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,13 +13,13 @@
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "{}".'.format(helpers.truncPath(__file__)) )
from coriolis.helpers import truncPath
from coriolis.helpers.io import vprint
vprint( 2, ' - "{}".'.format(truncPath(__file__)) )
import os
import os.path
from CRL import Environment
from CRL import AllianceFramework
from coriolis.CRL import Environment, AllianceFramework
allianceTop = None
if 'ALLIANCE_TOP' in os.environ:

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) Sorbonne Université 2019-2021, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,7 +13,8 @@
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "{}".'.format(helpers.truncPath(__file__)) )
from coriolis.helpers import truncPath
from coriolis.helpers.io import vprint
vprint( 2, ' - "{}".'.format(truncPath(__file__)) )
#import common.analog
#from ...common import analog

View File

@ -0,0 +1,137 @@
# This file is part of the Coriolis Software.
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
# | Alliance / Hurricane Interface |
# | |
# | Author : Jean-Paul CHAPUT |
# | E-mail : Jean-Paul.Chaput@lip6.fr |
# | =============================================================== |
# | Python : "./node180/scn6m_deep_09/devices.py" |
# +-----------------------------------------------------------------+
from coriolis.helpers import truncPath, sysConfDir
from coriolis.helpers.io import vprint
vprint( 2, ' - "{}".'.format(truncPath(__file__)) )
from ...common import devices
from ...common.devices import addDevice
chamsDir = sysConfDir + '/share/coriolis2/'
spiceDir = chamsDir + 'spice/'
addDevice( name = 'DifferentialPairBulkConnected'
, spice = spiceDir+'DiffPairBulkConnected.spi'
, connectors = ( 'D1', 'D2', 'G1', 'G2', 'S' )
, layouts = ( ('Horizontal M2' , 'coriolis.oroshi.DP_horizontalM2.py' )
, ('Symmetrical' , 'coriolis.oroshi.DP_symmetrical.py' )
, ('Common centroid', 'coriolis.oroshi.DP_2DCommonCentroid.py')
, ('Interdigitated' , 'coriolis.oroshi.DP_interdigitated.py' )
, ('WIP DP' , 'coriolis.oroshi.wip_dp.py' )
)
)
addDevice( name = 'DifferentialPairBulkUnconnected'
, spice = spiceDir+'DiffPairBulkUnconnected.spi'
, connectors = ( 'D1', 'D2', 'G1', 'G2', 'S', 'B' )
, layouts = ( ('Horizontal M2' , 'coriolis.oroshi.DP_horizontalM2.py' )
, ('Symmetrical' , 'coriolis.oroshi.DP_symmetrical.py' )
, ('Common centroid', 'coriolis.oroshi.DP_2DCommonCentroid.py')
, ('Interdigitated' , 'coriolis.oroshi.DP_interdigitated.py' )
, ('WIP DP' , 'coriolis.oroshi.wip_dp.py' )
)
)
addDevice( name = 'LevelShifterBulkUnconnected'
, spice = spiceDir+'LevelShifterBulkUnconnected.spi'
, connectors = ( 'D1', 'D2', 'S1', 'S2', 'B' )
, layouts = ( ('Horizontal M2' , 'coriolis.oroshi.LS_horizontalM2.py' )
, ('Symmetrical' , 'coriolis.oroshi.LS_symmetrical.py' )
, ('Common centroid', 'coriolis.oroshi.LS_2DCommonCentroid.py')
, ('Interdigitated' , 'coriolis.oroshi.LS_interdigitated.py' )
)
)
addDevice( name = 'TransistorBulkConnected'
, spice = spiceDir+'TransistorBulkConnected.spi'
, connectors = ( 'D', 'G', 'S' )
, layouts = ( ('Rotate transistor', 'coriolis.oroshi.Transistor_rotate.py')
, ('Common transistor', 'coriolis.oroshi.Transistor_common.py')
, ('WIP Transistor' , 'coriolis.oroshi.wip_transistor.py' )
)
)
addDevice( name = 'TransistorBulkUnconnected'
, spice = spiceDir+'TransistorBulkUnconnected.spi'
, connectors = ( 'D', 'G', 'S', 'B' )
, layouts = ( ('Rotate transistor', 'coriolis.oroshi.Transistor_rotate.py')
, ('Common transistor', 'coriolis.oroshi.Transistor_common.py')
, ('WIP Transistor' , 'coriolis.oroshi.wip_transistor.py' )
)
)
addDevice( name = 'CrossCoupledPairBulkConnected'
, spice = spiceDir+'CCPairBulkConnected.spi'
, connectors = ( 'D1', 'D2', 'S' )
, layouts = ( ('Horizontal M2' , 'coriolis.oroshi.CCP_horizontalM2.py' )
, ('Symmetrical' , 'coriolis.oroshi.CCP_symmetrical.py' )
, ('Common centroid', 'coriolis.oroshi.CCP_2DCommonCentroid.py')
, ('Interdigitated' , 'coriolis.oroshi.CCP_interdigitated.py' )
)
)
addDevice( name = 'CrossCoupledPairBulkUnconnected'
, spice = spiceDir+'CCPairBulkUnconnected.spi'
, connectors = ( 'D1', 'D2', 'S', 'B' )
, layouts = ( ('Horizontal M2' , 'coriolis.oroshi.CCP_horizontalM2.py' )
, ('Symmetrical' , 'coriolis.oroshi.CCP_symmetrical.py' )
, ('Common centroid', 'coriolis.oroshi.CCP_2DCommonCentroid.py')
, ('Interdigitated' , 'coriolis.oroshi.CCP_interdigitated.py' )
)
)
addDevice( name = 'CommonSourcePairBulkConnected'
, spice = spiceDir+'CommonSourcePairBulkConnected.spi'
, connectors = ( 'D1', 'D2', 'S', 'G' )
, layouts = ( ('Horizontal M2' , 'coriolis.oroshi.CSP_horizontalM2.py' )
, ('Symmetrical' , 'coriolis.oroshi.CSP_symmetrical.py' )
, ('Interdigitated' , 'coriolis.oroshi.CSP_interdigitated.py' )
, ('WIP CSP' , 'coriolis.oroshi.wip_csp.py' )
)
)
addDevice( name = 'CommonSourcePairBulkUnconnected'
, spice = spiceDir+'CommonSourcePairBulkUnconnected.spi'
, connectors = ( 'D1', 'D2', 'S', 'G', 'B' )
, layouts = ( ('Horizontal M2' , 'coriolis.oroshi.CSP_horizontalM2.py' )
, ('Symmetrical' , 'coriolis.oroshi.CSP_symmetrical.py' )
, ('Interdigitated' , 'coriolis.oroshi.CSP_interdigitated.py' )
, ('WIP CSP' , 'coriolis.oroshi.wip_csp.py' )
)
)
addDevice( name = 'SimpleCurrentMirrorBulkConnected'
, spice = spiceDir+'CurrMirBulkConnected.spi'
, connectors = ( 'D1', 'D2', 'S' )
, layouts = ( ('Horizontal M2' , 'coriolis.oroshi.SCM_horizontalM2.py' )
, ('Symmetrical' , 'coriolis.oroshi.SCM_symmetrical.py' )
, ('Common centroid', 'coriolis.oroshi.SCM_2DCommonCentroid.py')
, ('Interdigitated' , 'coriolis.oroshi.SCM_interdigitated.py' )
)
)
addDevice( name = 'SimpleCurrentMirrorBulkUnconnected'
, spice = spiceDir+'CurrMirBulkUnconnected.spi'
, connectors = ( 'D1', 'D2', 'S', 'B' )
, layouts = ( ('Horizontal M2' , 'coriolis.oroshi.SCM_horizontalM2.py' )
, ('Symmetrical' , 'coriolis.oroshi.SCM_symmetrical.py' )
, ('Common centroid', 'coriolis.oroshi.SCM_2DCommonCentroid.py')
, ('Interdigitated' , 'coriolis.oroshi.SCM_interdigitated.py' )
)
)
addDevice( name = 'MultiCapacitor'
#, spice = spiceDir+'MIM_OneCapacitor.spi'
#, connectors = ( 'T1', 'B1' )
, layouts = ( ('Matrix', 'coriolis.oroshi.capacitormatrix.py' ),
)
)
addDevice( name = 'Resistor'
#, spice = spiceDir+'MIM_OneCapacitor.spi'
, connectors = ( 'PIN1', 'PIN2' )
, layouts = ( ('Snake', 'coriolis.oroshi.resistorsnake.py' ),
)
)

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) Sorbonne Université 2019-2021, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,9 +13,10 @@
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "{}".'.format(helpers.truncPath(__file__)) )
from coriolis.helpers import truncPath
from coriolis.helpers.io import vprint
vprint( 2, ' - "{}".'.format(truncPath(__file__)) )
import common.display
from ...common import display
common.display.createStyles( scale=0.5 )
display.createStyles( scale=0.5 )

View File

@ -8,14 +8,12 @@
#
# Used revision 8.00 of May 11, 2009.
import helpers.io
helpers.io.vprint( 2, ' - "{}".'.format(helpers.truncPath(__file__)) )
from coriolis.helpers import truncPath
from coriolis.helpers.io import vprint
vprint( 2, ' - "{}".'.format(truncPath(__file__)) )
from Hurricane import DbU
from helpers.analogtechno import Length
from helpers.analogtechno import Area
from helpers.analogtechno import Asymmetric
from helpers.analogtechno import loadAnalogTechno
from coriolis.Hurricane import DbU
from coriolis.helpers.analogtechno import Length, Area, Asymmetric, loadAnalogTechno
analogTechnologyTable = \

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) Sorbonne Université 2019-2021, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,7 +13,8 @@
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "{}".'.format(helpers.truncPath(__file__)) )
from coriolis.helpers import truncPath
from coriolis.helpers.io import vprint
vprint( 2, ' - "{}".'.format(truncPath(__file__)) )
import common.etesian
from ...common import etesian

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) Sorbonne Université 2019-2021, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,17 +13,16 @@
# +-----------------------------------------------------------------+
import Cfg
import helpers.io
helpers.io.vprint( 2, ' - "{}".'.format(helpers.truncPath(__file__)) )
import coriolis.Cfg as Cfg
from coriolis.helpers import truncPath, l, u, n
from coriolis.helpers.io import vprint
vprint( 2, ' - "{}".'.format(truncPath(__file__)) )
from Hurricane import DataBase
from CRL import AllianceFramework
from CRL import RoutingGauge
from CRL import RoutingLayerGauge
from CRL import CellGauge
from helpers import l, n, u
import common.kite
from coriolis.Hurricane import DataBase
from coriolis.CRL import AllianceFramework, RoutingGauge, \
RoutingLayerGauge, CellGauge
from ...common import kite
p = Cfg.getParamDouble ( 'lefImport.minTerminalWidth' ).setDouble ( 0.0 )

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) Sorbonne Université 2019-2021, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,7 +13,8 @@
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "{}".'.format(helpers.truncPath(__file__)) )
from coriolis.helpers import truncPath
from coriolis.helpers.io import vprint
vprint( 2, ' - "{}".'.format(truncPath(__file__)) )
import common.misc
from ...common import misc

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) Sorbonne Université 2019-2021, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,7 +13,8 @@
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "{}".'.format(helpers.truncPath(__file__)) )
from coriolis.helpers import truncPath
from coriolis.helpers.io import vprint
vprint( 2, ' - "{}".'.format(truncPath(__file__)) )
import common.patterns
from ...common import patterns

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne University 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,11 +13,10 @@
# +-----------------------------------------------------------------+
import Cfg
import helpers.io
helpers.io.vprint( 2, ' - "{}".'.format(helpers.truncPath(__file__)) )
from helpers import l, u, n
import coriolis.Cfg as Cfg
from coriolis.helpers import truncPath, l, u, n
from coriolis.helpers.io import vprint
vprint( 2, ' - "{}".'.format(truncPath(__file__)) )
Cfg.getParamInt ( "chip.block.rails.count" ).setInt ( 5 )
Cfg.getParamInt ( "chip.block.rails.hWidth" ).setInt ( l( 24) )

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) Sorbonne Universié 2019-2021, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,11 +13,12 @@
# +-----------------------------------------------------------------+
import Cfg
import helpers.io
helpers.io.vprint( 2, ' - "{}".'.format(helpers.truncPath(__file__)) )
import coriolis.Cfg as Cfg
from coriolis.helpers import truncPath
from coriolis.helpers.io import vprint
vprint( 2, ' - "{}".'.format(truncPath(__file__)) )
import common.stratus1
from ...common import stratus1
Cfg.getParamString( "stratus1.format" ).setString( "vst" )
Cfg.getParamString( "stratus1.simulator" ).setString( "asimut" )

View File

@ -13,12 +13,11 @@
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "{}".'.format(helpers.truncPath(__file__)) )
from helpers import l, u, n
from Hurricane import DbU
from Hurricane import DataBase
from Hurricane import Technology
from coriolis.helpers import truncPath, l, u, n
from coriolis.helpers.io import vprint
vprint( 2, ' - "{}".'.format(truncPath(__file__)) )
from coriolis.Hurricane import DbU, DataBase, Technology
tech = DataBase.getDB().getTechnology()
if tech:
@ -32,8 +31,8 @@ DbU.setGridsPerLambda ( 18 )
DbU.setSymbolicSnapGridStep( DbU.fromLambda( 1.0) )
DbU.setPolygonStep ( DbU.fromGrid ( 9.0) )
import common
from common.technology import *
from ...common import loadGdsLayers
from ...common.technology import *
# Redefine all size from the "cmos" common part.
NWELL.setExtentionCap( nWell, l(4.0) )
@ -225,4 +224,4 @@ gdsLayersTable = \
]
common.loadGdsLayers( gdsLayersTable )
loadGdsLayers( gdsLayersTable )

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,30 +13,31 @@
# +-----------------------------------------------------------------+
import Cfg
import helpers.io
helpers.io.vprint( 1, ' o Loading "node45.freepdk45" technology.' )
helpers.io.vprint( 2, ' - "%s".' % helpers.truncPath(__file__) )
import coriolis.Cfg as Cfg
from coriolis.helpers import truncPath, tagConfModules
from coriolis.helpers.io import vprint
vprint( 1, ' o Loading "node45.freepdk45" technology.' )
vprint( 2, ' - "%s".' % truncPath(__file__) )
from Hurricane import DataBase
from CRL import System
from coriolis.Hurricane import DataBase
from coriolis.CRL import System
Cfg.Configuration.pushDefaultPriority( Cfg.Parameter.Priority.ConfigurationFile )
DataBase.create()
System.get()
import node45.freepdk45.misc
import node45.freepdk45.technology
import node45.freepdk45.display
import node45.freepdk45.analog
import node45.freepdk45.alliance
import node45.freepdk45.etesian
import node45.freepdk45.kite
import node45.freepdk45.plugins
import node45.freepdk45.stratus1
import node45.freepdk45.devices
from .freepdk45 import misc
from .freepdk45 import technology
from .freepdk45 import display
from .freepdk45 import analog
from .freepdk45 import alliance
from .freepdk45 import etesian
from .freepdk45 import kite
from .freepdk45 import plugins
from .freepdk45 import stratus1
from .freepdk45 import devices
Cfg.Configuration.popDefaultPriority()
helpers.tagConfModules()
tagConfModules()

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2020, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,13 +13,13 @@
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "%s".' % helpers.truncPath(__file__) )
from coriolis.helpers import truncPath
from coriolis.helpers.io import vprint
vprint( 2, ' - "%s".' % truncPath(__file__) )
import os
import os.path
from CRL import Environment
from CRL import AllianceFramework
from coriolis.CRL import Environment, AllianceFramework
allianceTop = None

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2020, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,7 +13,8 @@
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "%s".' % helpers.truncPath(__file__) )
from coriolis.helpers import truncPath
from coriolis.helpers.io import vprint
vprint( 2, ' - "%s".' % truncPath(__file__) )
#import common.analog
#from ...common import analog

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2020, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,14 +13,15 @@
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "%s".' % helpers.truncPath(__file__) )
from coriolis.helpers import truncPath, sysConfDir
from coriolis.helpers.io import vprint
vprint( 2, ' - "%s".' % truncPath(__file__) )
import common.devices
from common.devices import addDevice
from ...common import devices
from ...common.devices import addDevice
chamsDir = helpers.sysConfDir + '/share/coriolis2/'
chamsDir = sysConfDir + '/share/coriolis2/'
spiceDir = chamsDir + 'spice/'

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2020, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,10 +13,10 @@
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "%s".' % helpers.truncPath(__file__) )
from coriolis.helpers import truncPath
from coriolis.helpers.io import vprint
vprint( 2, ' - "%s".' % truncPath(__file__) )
import common.display
from ...common import display
common.display.createStyles( scale=0.5 )
display.createStyles( scale=0.5 )

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,7 +13,8 @@
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "%s".' % helpers.truncPath(__file__) )
from coriolis.helpers import truncPath
from coriolis.helpers.io import vprint
vprint( 2, ' - "%s".' % truncPath(__file__) )
import common.etesian
from ...common import etesian

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,17 +13,15 @@
# +-----------------------------------------------------------------+
import Cfg
import helpers.io
helpers.io.vprint( 2, ' - "%s".' % helpers.truncPath(__file__) )
import coriolis.Cgf as Cfg
from coriolis.helpers import truncPath, l, u, n
from coriolis.helpers.io import vprint
vprint( 2, ' - "%s".' % truncPath(__file__) )
from Hurricane import DataBase
from CRL import AllianceFramework
from CRL import RoutingGauge
from CRL import RoutingLayerGauge
from CRL import CellGauge
from helpers import l, n, u
import common.kite
from coriolis.Hurricane import DataBase
from coriolis.CRL import AllianceFramework, RoutingGauge, \
RoutingLayerGauge, CellGauge
from ...common import kite
p = Cfg.getParamDouble ( 'lefImport.minTerminalWidth' ).setDouble ( 0.0 )

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,7 +13,8 @@
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "%s".' % helpers.truncPath(__file__) )
from coriolis.helpers import truncPath
from coriolis.helpers.io import vprint
vprint( 2, ' - "%s".' % truncPath(__file__) )
import common.misc
from ...common import misc

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,7 +13,8 @@
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "%s".' % helpers.truncPath(__file__) )
from coriolis.helpers import truncPath
from coriolis.helpers.io import vprint
vprint( 2, ' - "%s".' % truncPath(__file__) )
import common.patterns
from ...common import patterns

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,11 +13,10 @@
# +-----------------------------------------------------------------+
import Cfg
import helpers.io
helpers.io.vprint( 2, ' - "%s".' % helpers.truncPath(__file__) )
from helpers import l, u, n
import coriolis.Cfg as Cfg
from coriolis.helpers import truncPath, l, u, n
from coriolis.helpers.io import vprint
vprint( 2, ' - "%s".' % truncPath(__file__) )
Cfg.getParamInt ( "chip.block.rails.count" ).setInt ( 5 )
Cfg.getParamInt ( "chip.block.rails.hWidth" ).setInt ( l( 24) )

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,11 +13,12 @@
# +-----------------------------------------------------------------+
import Cfg
import helpers.io
helpers.io.vprint( 2, ' - "%s".' % helpers.truncPath(__file__) )
import coriolis.Cfg as Cfg
from coriolis.helpers import truncPath
from coriolis.helpers.io import vprint
vprint( 2, ' - "%s".' % truncPath(__file__) )
import common.stratus1
from ...common import stratus1
Cfg.getParamString( "stratus1.format" ).setString( "vst" )

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) Sorbonne Université 2019-2021, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,13 +13,11 @@
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "{}".'.format(helpers.truncPath(__file__)) )
from coriolis.helpers import truncPath, l, u, n
from coriolis.helpers.io import vprint
vprint( 2, ' - "{}".'.format(truncPath(__file__)) )
from helpers import l, u, n
from Hurricane import DbU
from Hurricane import DataBase
from Hurricane import Technology
from coriolis.Hurricane import DbU, DataBase, Technology
def setEnclosures ( layer, subLayer, enclosures ):
@ -47,8 +45,8 @@ DbU.setSymbolicSnapGridStep( DbU.fromLambda( 1.0) )
DbU.setPolygonStep ( DbU.fromGrid ( 1.0) )
import common
from common.technology import *
from ..common import loadGdsLayers
from ..common.technology import *
# Rules for real layers.
metal1 .setMinimalSpacing( u( 0.065) )

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,30 +13,31 @@
# +-----------------------------------------------------------------+
import Cfg
import helpers.io
helpers.io.vprint( 1, ' o Loading "node600/phenitec" technology.' )
helpers.io.vprint( 2, ' - "%s".' % helpers.truncPath(__file__) )
import coriolis.Cfg as Cfg
from coriolis.helpers import truncPath, tagConfModules
from coriolis.helpers.io import vprint
vprint( 1, ' o Loading "node600/phenitec" technology.' )
vprint( 2, ' - "%s".' % truncPath(__file__) )
from Hurricane import DataBase
from CRL import System
from coriolis.Hurricane import DataBase
from coriolis.CRL import System
Cfg.Configuration.pushDefaultPriority( Cfg.Parameter.Priority.ConfigurationFile )
if not DataBase.getDB(): DataBase.create()
System.get()
import node600.phenitec.misc
import node600.phenitec.technology
import node600.phenitec.display
import node600.phenitec.analog
import node600.phenitec.alliance
import node600.phenitec.etesian
import node600.phenitec.kite
import node600.phenitec.plugins
import node600.phenitec.stratus1
import node600.phenitec.devices
from .phenitec import misc
from .phenitec import technology
from .phenitec import display
from .phenitec import analog
from .phenitec import alliance
from .phenitec import etesian
from .phenitec import kite
from .phenitec import plugins
from .phenitec import stratus1
from .phenitec import devices
Cfg.Configuration.popDefaultPriority()
helpers.tagConfModules()
tagConfModules()

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) Sorbonne Université 2019-2021, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,13 +13,13 @@
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "{}".'.format(helpers.truncPath(__file__)) )
from coriolis.helpers import truncPath
from coriolis.helpers.io import vprint
vprint( 2, ' - "{}".'.format(truncPath(__file__)) )
import os
import os.path
from CRL import Environment
from CRL import AllianceFramework
from coriolis.CRL import Environment, AllianceFramework
allianceTop = None

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,7 +13,8 @@
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "%s".' % helpers.truncPath(__file__) )
from coriolis.helpers import truncPath
from coriolis.helpers.io import vprint
vprint( 2, ' - "%s".' % truncPath(__file__) )
#import common.analog
#from ...common import analog

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,14 +13,15 @@
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "%s".' % helpers.truncPath(__file__) )
from coriolis.helpers import truncPath, sysConfDir
from coriolis.helpers.io import vprint
vprint( 2, ' - "%s".' % truncPath(__file__) )
import common.devices
from common.devices import addDevice
from ...common import devices
from ...common.devices import addDevice
chamsDir = helpers.sysConfDir + '/share/coriolis2/'
chamsDir = sysConfDir + '/share/coriolis2/'
spiceDir = chamsDir + 'spice/'

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,10 +13,10 @@
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "%s".' % helpers.truncPath(__file__) )
from coriolis.helpers import truncPath
from coriolis.helpers.io import vprint
vprint( 2, ' - "%s".' % truncPath(__file__) )
import common.display
from ...common import display
common.display.createStyles( scale=0.5 )
display.createStyles( scale=0.5 )

View File

@ -1,6 +1,6 @@
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2019-2019, All Rights Reserved
# Copyright (c) Sorbonne Université 2019-2023, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
@ -13,7 +13,8 @@
# +-----------------------------------------------------------------+
import helpers.io
helpers.io.vprint( 2, ' - "%s".' % helpers.truncPath(__file__) )
from coriolis.helpers import truncPath
from coriolis.helpers.io import vprint
vprint( 2, ' - "%s".' % truncPath(__file__) )
import common.etesian
from ...common import etesian

Some files were not shown because too many files have changed in this diff Show More