Hello, Cyclus! [Python]¶
This pages walks you through a very simple hello world example using Cyclus agents. First make sure that you have the dependencies installed, namely Cyclus and a recent version of Python (2.7 or 3.5+).
Cyclus can read agents from any normal python package and module. If you are unsure of
how to start and install a Python project, please see the Python documentation. There are
also many high-quality guides and tools online. Here, we will assume that there is a
project called proj that has a module called agents that contains an archetype
class called MyFacility.
To start writing MyFacility, open up agents.py, import cyclus.agents,
anf write the following:
proj/agents.py:
from cyclus.agents import Facility
class MyFacility(Facility):
"""My first Cyclus archetype!"""
And that is it! The above is a fully-functional Cyclus facility.
Let’s now change the behavior of the MyFacility’s tick() and
tock() methods to print “Hello” and “World” respectively.
proj/agents.py:
from cyclus.agents import Facility
class MyFacility(Facility):
"""My first Cyclus archetype!"""
def tick(self):
print("Hello,")
def tock(self):
print("World!")
Now that we have altered the behavior of MyFacility, reinstall the project
so that it is available to cyclus.
You can refer to this facility in a Cyclus input file by using the Python package and module name in the lib section of the archetypes spec, like you would write it if you were importing a module. The class name goes in the name section of the spec.
<archetypes>
<spec><lib>proj.agents</lib><name>MyFacility</name></spec>
</archetypes>
Let’s run Cyclus with this example! In the input directory there is
an example.xml. First modify it to point to the archetype we just wrote.
Running Cyclus on this file with the command
cyclus input/example.xml should produce the following output.
$ cyclus input/example.xml
:
.CL:CC CC _Q _Q _Q_Q _Q _Q _Q
CC;CCCCCCCC:C; /_\) /_\)/_/\\) /_\) /_\) /_\)
CCCCCCCCCCCCCl __O|/O___O|/O_OO|/O__O|/O__O|/O____________O|/O__
CCCCCCf iCCCLCC /////////////////////////////////////////////////
iCCCt ;;;;;. CCCC
CCCC ;;;;;;;;;. CClL. c
CCCC ,;; ;;: CCCC ; : CCCCi
CCC ;; ;; CC ;;: CCC` `C;
lCCC ;; CCCC ;;;: :CC .;;. C; ; : ; :;;
CCCC ;. CCCC ;;;, CC ; ; Ci ; : ; : ;
iCC :; CC ;;;, ;C ; CC ; : ; .
CCCi ;; CCC ;;;. .C ; tf ; : ; ;.
CCC ;; CCC ;;;;;;; fC : lC ; : ; ;:
iCf ;; CC :;;: tC ; CC ; : ; ;
fCCC :; LCCf ;;;: LC :. ,: C ; ; ; ; ;
CCCC ;; CCCC ;;;: CCi `;;` CC. ;;;; :;.;. ; ,;
CCl ;; CC ;;;; CCC CCL
tCCC ;; ;; CCCL ;;; tCCCCC.
CCCC ;; :;; CCCCf ; ,L
lCCC ;;;;;; CCCL
CCCCCC :;; fCCCCC
. CCCC CCCC .
.CCCCCCCCCCCCCi
iCCCCCLCf
. C. ,
:
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Hello,
World!
Status: Cyclus run successful!
Output location: cyclus.sqlite
Simulation ID: 0ae730e0-a9a8-4576-afaa-d1db6399d5a2
If you look in the input file you’ll see that the simulation duration was set to 10. This is why “Hello, World!” is printed ten times.





